diff --git a/README.md b/README.md index c882a503d6..4cc8f4fb1d 100644 --- a/README.md +++ b/README.md @@ -148,7 +148,7 @@ A Serverless Workflow service that works as a Github bot application, which reac - Rules on Quarkus with Unit: see [README.md](kogito-quarkus-examples/ruleunit-quarkus-example/README.md) - Process on Quarkus: see [README.md](kogito-quarkus-examples/process-quarkus-example/README.md) - Process on Spring Boot: see [README.md](kogito-springboot-examples/process-springboot-example/README.md) -- Trusty on Quarkus (DevUI integration): see [README.md](kogito-quarkus-examples/trusty-tracing-devservices/README.md) +- Trusty on Quarkus: see [README.md](kogito-quarkus-examples/trusty-tracing-devservices/README.md) ## Getting Help ### Issues diff --git a/kogito-quarkus-examples/pom.xml b/kogito-quarkus-examples/pom.xml index fbecf477cb..06fd0bfdee 100644 --- a/kogito-quarkus-examples/pom.xml +++ b/kogito-quarkus-examples/pom.xml @@ -95,11 +95,9 @@ process-service-calls-quarkus process-timer-quarkus process-usertasks-custom-lifecycle-quarkus - process-usertasks-quarkus-with-console process-usertasks-quarkus process-usertasks-timer-quarkus-with-console process-usertasks-timer-data-index-persistence-addon-quarkus - process-usertasks-with-security-oidc-quarkus-with-console process-usertasks-with-security-oidc-quarkus process-usertasks-with-security-quarkus rules-incubation-api-quarkus @@ -160,10 +158,8 @@ process-service-calls-quarkus process-timer-quarkus process-usertasks-custom-lifecycle-quarkus - process-usertasks-quarkus-with-console process-usertasks-quarkus process-usertasks-timer-quarkus-with-console - process-usertasks-with-security-oidc-quarkus-with-console process-usertasks-with-security-oidc-quarkus process-usertasks-with-security-quarkus rules-quarkus-helloworld diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/README.md b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/README.md deleted file mode 100644 index a2c92d324f..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/README.md +++ /dev/null @@ -1,394 +0,0 @@ -# Process user task orchestration: Hiring - -## Description - -This Quickstart showcases a basic implementation of the **Hiring** process. - -This quickstart project shows very typical user task orchestration, is based on a simple Hiring process -that drives a *Candidate* through different interviews until it gets hired. - -> **_NOTE:_** This example uses keycloak authentication to enable security only in the consoles and not in runtime. -### The Candidate data model - -The *Hiring* example uses a *Candidate* POJO to represent the person that wants to get the job. You can find it in the *org.kie.kogito.hr* package. - -```java -public class Candidate { - - private String name; // Name of the candidate - private String email; // Email of the candidate - private Integer salary; // Expected salary - private String skills; // List of technical skills - - public Candidate(String name, String email, Integer salary, String skills) { - this.name = name; - this.email = email; - this.salary = salary; - this.skills = skills; - } - - // Setters & getters... -} -``` - -### The Business Logic - -The example process consists in two human tasks that will drive the candidate trough two interview with *HR* and *IT* departments represented by the *HR Interview* & *IT interview* User Tasks. - -

- -

- -#### Process data - -

- -The process handles three _Process Variables_: - -* *candidate*: represents the candidate person that wants to get the job. It is an instance of *org.kie.kogito.hiring.Candidate*. -* *hr_approval*: a boolean that determines that HR department approves the hiring. -* *it_approval*: a boolean that determines that IT department approves the hiring. - -### The Hiring process - -Once it starts, the process will move into the *HR Interview task*, this task represents an interview with someone from the company HR department. - -The task will get the *candidate* as an input assignment and as an output it will generate an *approval* boolean that represents assesment of hiring or not hiring the *candidate*. It will be stored on the *hr_approval* process variable - -

- -
HR Interview assignments -

- -After completing the *HR Interview* the candidate moves to the *IT Interview* task with the company IT department. Ashe task will get the *candidate* as an input assignment and as an output it will generate an *approval* boolean that represents assesment of hiring or not hiring the *candidate*. - -

- -
IT Interview assignments -

- - -The required *Kogito and Infrastructure Services* for this example are: - -- Infinispan / Postgresql -- Kafka -- Kogito Data Index -- Kogito Management Console -- Kogito Task Console -- Keycloak server - -## Running the Quickstart - -### Prerequisites - -* Java 17+ installed -* Environment variable JAVA_HOME set accordingly -* Maven 3.9.6+ installed -* Docker and Docker Compose to run the required example infrastructure. - -And when using native image compilation, you will also need: - - GraalVM 20.3+ installed - - Environment variable GRAALVM_HOME set accordingly - - GraalVM native image needs as well native-image extension: https://www.graalvm.org/reference-manual/native-image/ - - Note that GraalVM native image compilation typically requires other packages (glibc-devel, zlib-devel and gcc) to be installed too, please refer to GraalVM installation documentation for more details. - -### Starting the Kogito and Infrastructure Services - -This quickstart provides a docker compose template that starts all the required services. This setup ensures that all services are connected with a default configuration. - -

- -### Run Example with PostgreSQL - -#### Compile Hiring example with profile postgresql - -First thing is to compile the example with the postgresql profile executing: - -For Linux and MacOS: - -- Open a Terminal -- Go to the example folder and run -```sh -mvn clean install -Ppostgresql,container -``` - -#### Start infrastructure services - -You should start all the services before you execute any of the **Hiring** example, to do that please execute: - -For Linux and MacOS: - -1. Open a Terminal -2. Go to docker-compose folder -3. Run the ```startServices.sh``` script - -```bash -sh ./startServices.sh -``` - -or - -```bash -sh ./startServices.sh postgresql -``` - -Once all services bootstrap, the following ports will be assigned on your local machine: - -- PostgreSQL: 5432 -- Kafka: 9092 -- Data Index: 8180 -- Management Console: 8280 -- Task Console: 8380 -- Keycloak: 8480 -- PgAdmin: 8055 -- example-runtime-service: 8080 - -> **_NOTE:_** This step requires the project to be compiled, please consider running a ```mvn clean install -Ppostgresql,container``` command on the project root before running the ```startServices.sh``` script for the first time or any time you modify the project. - -Once started you can simply stop all services by executing the ```docker-compose -f docker-compose-postgresql.yml stop```. - -All created containers can be removed by executing the ```docker-compose -f docker-compose-postgresql.yml rm```. - -#### Run the Hiring example with PostgreSQL - -##### Compile and Run Hiring example process in Local Dev Mode - -Once all the infrastructure services are ready, you can start the Hiring example by doing: - -- Open a Terminal -- Go to the hiring example folder -- Start the example with the command - -```bash -mvn clean package quarkus:dev -Ppostgresql -``` - -NOTE: With dev mode of Quarkus you can take advantage of hot reload for business assets like processes, rules, decision tables and java code. No need to redeploy or restart your running application. - -##### Package and Run in JVM mode - -```sh -mvn clean package -Ppostgresql -java -jar target/quarkus-app/quarkus-run.jar -``` - -or on windows - -```sh -mvn clean package -Ppostgresql -java -jar target\quarkus-app\quarkus-run.jar -``` - -##### Package and Run using Local Native Image -Note that this requires GRAALVM_HOME to point to a valid GraalVM installation - -```sh -mvn clean package -Pnative -Ppostgresql -``` - -To run the generated native executable, generated in `target/`, execute - -```sh -./target/./target/process-usertasks-quarkus-with-console-runner -``` - -### Run Example with Infinispan - -#### Compile Hiring example with profile infinispan - -First thing is to compile the example with the infinispan profile executing: - -For Linux and MacOS: - -1. Open a Terminal -2. Go to the example folder and run -```sh -mvn clean install -Pinfinispan,container -``` -#### Start infrastructure services - -You should start all the services before you execute any of the **Hiring** example, to do that please execute: - -For Linux and MacOS: - -1. Open a Terminal -2. Go to docker-compose folder -3. Run the ```startServices.sh``` script with infinispan argument - -```bash -sh ./startServices.sh infinispan -``` - -Once all services bootstrap, the following ports will be assigned on your local machine: - -- Infinispan: 11222 -- Kafka: 9092 -- Data Index: 8180 -- Management Console: 8280 -- Task Console: 8380 -- Keycloak: 8480 -- example-runtime-service: 8080 - -> **_NOTE:_** This step requires the project to be compiled, please consider running a ```mvn clean install -Pinfinispan,container``` command on the project root before running the ```startServices.sh infinispan``` script for the first time or any time you modify the project. - -Once started you can simply stop all services by executing the ```docker-compose -f docker-compose-infinispan.yml stop```. - -All created containers can be removed by executing the ```docker-compose -f docker-compose-infinispan.yml rm```. - -#### Run the Hiring example with Infinispan - -##### Compile and Run Hiring example process in Local Dev Mode - -Once all the infrastructure services are ready, you can start the Hiring example by doing: - -- Open a Terminal -- Go to the hiring example folder -- Start the example with the command - -```bash -mvn clean package quarkus:dev -Pinfinispan -``` - -NOTE: With dev mode of Quarkus you can take advantage of hot reload for business assets like processes, rules, decision tables and java code. No need to redeploy or restart your running application. - -##### Package and Run in JVM mode - -```sh -mvn clean package -Pinfinispan -java -jar target/quarkus-app/quarkus-run.jar -``` - -or on windows - -```sh -mvn clean package -Pinfinispan -java -jar target\quarkus-app\quarkus-run.jar -``` - -##### Package and Run using Local Native Image -Note that this requires GRAALVM_HOME to point to a valid GraalVM installation - -```sh -mvn clean package -Pnative -Pinfinispan -``` - -To run the generated native executable, generated in `target/`, execute - -```sh -./target/./target/process-usertasks-quarkus-with-console-runner -``` - -### Using Keycloak as Authentication Server - -In this Quickstart we'll be using [Keycloak](https://www.keycloak.org/) as *Authentication Server*. It will be started as a part of the project *Infrastructure Services*, you can check the configuration on the project [docker-compose.yml](docker-compose/docker-compose.yml) in [docker-compose](docker-compose) folder. - -It will install the *Kogito Realm* that comes with a predefined set of users: -| Login | Password | Roles | -| ------------- | ---------- | ------------------- | -| admin | admin | *admin*, *managers* | -| alice | alice | *user* | -| jdoe | jdoe | *managers* | - -Once Keycloak is started, you should be able to access your *Keycloak Server* at [localhost:8480/auth](http://localhost:8480/auth) with *admin* user. - -### Submit a request to start new hiring - -Once the service is up and running you can make use of the **Hiring** application by a sending request to `http://localhost:8080/hiring` with following content: -```json -{ - "candidate": { - "name": "Jon Snow", - "email": "jsnow@example.com", - "salary": 30000, - "skills": "Java, Kogito" - } -} -``` - -In a Terminal you can execute this command to start a **Hiring** process for the "Jon Snow" candidate: -```bash -curl -H "Content-Type: application/json" -H "Accept: application/json" -X POST http://localhost:8080/hiring -d @- << EOF -{ - "candidate": { - "name": "Jon Snow", - "email": "jsnow@example.com", - "salary": 30000, - "skills": "Java, Kogito" - } -} -EOF -``` - -### Show active Hiring process instance at Kogito Management Console - -To access the Kogito Management Console just open your browser and navigate to ``http://localhost:8280``. You'll be redirected to the *Keycloak* log in page. - -

- -

- -Once there, log in using any of the users specified in the [Using Keycloak as Authentication Server](#using-keycloak-as-authentication-server) - -

- -

- -> **_NOTE:_** For more information about how to work with Kogito Management Console, please refer to the [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#con-management-console_kogito-developing-process-services) page. - -Check the process instance details to see where is the execution path - -

- -

- -### Execute HR Interview task at Kogito Task Console - -To access the Kogito Task Console just open your browser and navigate to ``http://localhost:8380``. You'll be redirected to the *Keycloak* log in page. - -

- -

- -Once there, log in with an *managers* user (for example *jdoe*) and you should be redirected to the user **Task Inbox**: - -

- -

- -> **_NOTE:_** For more information about how to work with Kogito Task Console, please refer to the [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#con-task-console_kogito-developing-process-services) page. - -Access to HR Interview task and complete - -

- -

- -Check the process instance details at Kogito Management Console to see the execution path reflects the completed task - -

- -

- - -### Execute IT Interview task - -Access to Task Console again and verify IT Interview is available -

- -

- -Access to IT Interview task -

- -

- -And after complete the task, check the list of tasks show both completed tasks -

- -

- -Check the process instance details to verify the instance have been completed - -

- -

diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/.gitignore b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/.gitignore deleted file mode 100644 index b6632dbda5..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.env -svg/ -persistence/ \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/README.md b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/README.md deleted file mode 100644 index 8fa3cba9d1..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/README.md +++ /dev/null @@ -1,68 +0,0 @@ -## Kogito and Infrastructure services - -To allow a quick setup of all services required to run this demo, we provide a docker compose template that starts the following services: -- Postgresql / Infinispan -- (PgAdmin, only for postgres deployment) -- Kafka -- Kogito Data Index -- Kogito Jobs -- Kogito Management Console -- Kogito Task Console -- Keycloak - -In order to use it, please ensure you have Docker Compose installed on your machine, otherwise follow the instructions available -in [here](https://docs.docker.com/compose/install/). - -### Starting required services - -Once all services bootstrap, the following ports will be assigned on your local machine: -- PostgresQL: 5432 or Infinispan: 11222 -- PgAdmin: 8055 (only for postgres deployment) -- Kafka: 9092 -- Data Index: 8180 -- Jobs: 8580 -- Management Console: 8280 -- Task Console: 8380 -- Keycloak: 8480 - -### Postgresql deployment: - -####Start services - -./startServices.sh postgresql or just ./startServices.sh - - -#### Stopping and removing volume data - -To stop all services, simply run: - -docker-compose -f docker-compose-postgresql.yml stop - -It is also recomended to remove any of stopped containers by running: - -docker-compose -f docker-compose-postgresql.yml rm - -### Infinispan deployment: - -####Start services - - ./startServices.sh infinispan - -#### Stopping and removing volume data - -To stop all services, simply run: - -docker-compose -f docker-compose-infinispan.yml stop - -It is also recomended to remove any of stopped containers by running: - -docker-compose -f docker-compose-infinispan.yml rm - - -NOTE: All the running containers can be stopped running `docker stop $(docker ps -a -q)` - -NOTE: All the running containers can be removed running `docker rm $(docker ps -a -q)` - -For more details please check the Docker Compose documentation. - - docker-compose --help diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/docker-compose-infinispan.yml b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/docker-compose-infinispan.yml deleted file mode 100755 index 7d4e2950d4..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/docker-compose-infinispan.yml +++ /dev/null @@ -1,163 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -version: '2.1' - -services: - - infinispan: - image: infinispan/server:14.0.5.Final - container_name: infinispan - ports: - - "11222:11222" - command: "-c infinispan-demo.xml" - volumes: - - ./infinispan/infinispan.xml:/opt/infinispan/server/conf/infinispan-demo.xml:z - healthcheck: - test: [ "CMD", "curl", "-f", "http://localhost:11222/rest/v2/cache-managers/default/health/status" ] - interval: 1s - timeout: 1s - retries: 50 - - zookeeper: - container_name: zookeeper - image: strimzi/kafka:0.20.1-kafka-2.6.0 - command: [ - "sh", "-c", - "bin/zookeeper-server-start.sh config/zookeeper.properties" - ] - ports: - - "2181:2181" - environment: - LOG_DIR: "/tmp/logs" - - kafka: - image: strimzi/kafka:0.20.1-kafka-2.6.0 - container_name: kafka - command: [ - "sh", "-c", - "bin/kafka-server-start.sh config/server.properties --override inter.broker.listener.name=$${KAFKA_INTER_BROKER_LISTENER_NAME} --override listener.security.protocol.map=$${KAFKA_LISTENER_SECURITY_PROTOCOL_MAP} --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}" - ] - depends_on: - - zookeeper - ports: - - "9092:9092" - environment: - KAFKA_BROKER_ID: 0 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://kafka:9092 - KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://localhost:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT - KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL - KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 - LOG_DIR: "/tmp/logs" - - keycloak: - container_name: keycloak - image: quay.io/keycloak/keycloak:legacy - ports: - - "8480:8080" - volumes: - - ./keycloak/kogito-realm.json:/tmp/kogito-realm.json - healthcheck: - test: [ "CMD", "curl", "-f", "http://localhost:8080/auth/realms/kogito" ] - interval: 1s - timeout: 1s - retries: 50 - environment: - KEYCLOAK_USER: admin - KEYCLOAK_PASSWORD: admin - KEYCLOAK_IMPORT: /tmp/kogito-realm.json - - data-index: - container_name: data-index - image: quay.io/kiegroup/kogito-data-index-infinispan:${KOGITO_VERSION} - ports: - - "8180:8080" - depends_on: - kafka: - condition: service_started - infinispan: - condition: service_healthy - volumes: - - ./persistence/:/home/kogito/data/protobufs/ - environment: - QUARKUS_INFINISPAN_CLIENT_USE_AUTH: "false" - QUARKUS_INFINISPAN_CLIENT_HOSTS: infinispan:11222 - KAFKA_BOOTSTRAP_SERVERS: kafka:29092 - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - KOGITO_DATA_INDEX_PROPS: -Dkogito.protobuf.folder=/home/kogito/data/protobufs/ - - management-console: - container_name: management-console - image: quay.io/kiegroup/kogito-management-console:${KOGITO_VERSION} - ports: - - 8280:8080 - depends_on: - data-index: - condition: service_started - keycloak: - condition: service_healthy - volumes: - - ./svg/:/home/kogito/data/svg/ - environment: - KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - KOGITO_MANAGEMENT_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://localhost:8480/auth -Dkogito.consoles.keycloak.config.health-check-url=http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration -Dkogito.svg.folder.path=/home/kogito/data/svg - - task-console: - container_name: task-console - image: quay.io/kiegroup/kogito-task-console:${KOGITO_VERSION} - ports: - - 8380:8080 - depends_on: - data-index: - condition: service_started - keycloak: - condition: service_healthy - environment: - KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - KOGITO_TASK_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://localhost:8480/auth -Dkogito.consoles.keycloak.config.health-check-url=http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration - - example-runtime-service: - container_name: example-runtime-service - image: dev.local/${USER}/process-usertasks-quarkus-with-console:1.0-SNAPSHOT - ports: - - "8080:8080" - depends_on: - kafka: - condition: service_started - infinispan: - condition: service_healthy - data-index: - condition: service_started - volumes: - - ./../target/classes/META-INF/processSVG/:/home/kogito/data/svg/ - environment: - QUARKUS_INFINISPAN_CLIENT_USE_AUTH: "false" - QUARKUS_INFINISPAN_CLIENT_HOSTS: infinispan:11222 - KAFKA_BOOTSTRAP_SERVERS: kafka:29092 - QUARKUS_DATASOURCE_DB_KIND: infinispan - KOGITO_SERVICE_URL: http://example-runtime-service:8080 - KOGITO_DATAINDEX_HTTP_URL: http://data-index:8180 - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - extra_hosts: - - "data-index:host-gateway" \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/docker-compose-postgresql.yml b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/docker-compose-postgresql.yml deleted file mode 100755 index 146d3bb98c..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/docker-compose-postgresql.yml +++ /dev/null @@ -1,186 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -version: '2.1' - -services: - postgres: - image: postgres:13.4-alpine3.14 - ports: - - "5432:5432" - volumes: - - ./sql:/docker-entrypoint-initdb.d/ - healthcheck: - test: [ "CMD", "pg_isready", "-q", "-d", "kogito", "-U", "kogito-user" ] - timeout: 45s - interval: 10s - retries: 50 - environment: - - POSTGRES_USER=postgres - - POSTGRES_PASSWORD=postgres - - pgadmin-compose: - image: dpage/pgadmin4:5.0 - environment: - PGADMIN_DEFAULT_EMAIL: user@user.org - PGADMIN_DEFAULT_PASSWORD: pass - ports: - - 8055:80 - depends_on: - - postgres - container_name: pgadmin-container - - zookeeper: - container_name: zookeeper - image: strimzi/kafka:0.20.1-kafka-2.6.0 - command: [ - "sh", "-c", - "bin/zookeeper-server-start.sh config/zookeeper.properties" - ] - ports: - - "2181:2181" - environment: - LOG_DIR: "/tmp/logs" - - kafka: - image: strimzi/kafka:0.20.1-kafka-2.6.0 - container_name: kafka - command: [ - "sh", "-c", - "bin/kafka-server-start.sh config/server.properties --override inter.broker.listener.name=$${KAFKA_INTER_BROKER_LISTENER_NAME} --override listener.security.protocol.map=$${KAFKA_LISTENER_SECURITY_PROTOCOL_MAP} --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}" - ] - depends_on: - - zookeeper - ports: - - "9092:9092" - environment: - KAFKA_BROKER_ID: 0 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://kafka:9092 - KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://localhost:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT - KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL - KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 - LOG_DIR: "/tmp/logs" - - keycloak: - container_name: keycloak - image: quay.io/keycloak/keycloak:legacy - ports: - - "8480:8080" - volumes: - - ./keycloak/kogito-realm.json:/tmp/kogito-realm.json - healthcheck: - test: [ "CMD", "curl", "-f", "http://localhost:8080/auth/realms/kogito" ] - interval: 1s - timeout: 1s - retries: 50 - environment: - DB_VENDOR: POSTGRES - DB_ADDR: postgres - DB_DATABASE: kogito - DB_USER: kogito-user - DB_SCHEMA: public - DB_PASSWORD: kogito-pass - KEYCLOAK_USER: admin - KEYCLOAK_PASSWORD: admin - KEYCLOAK_IMPORT: /tmp/kogito-realm.json - - data-index: - container_name: data-index - image: quay.io/kiegroup/kogito-data-index-postgresql:${KOGITO_VERSION} - ports: - - "8180:8080" - depends_on: - kafka: - condition: service_started - postgres: - condition: service_healthy - volumes: - - ./target/protobuf:/home/kogito/data/protobufs/ - environment: - QUARKUS_DATASOURCE_JDBC_URL: "jdbc:postgresql://postgres:5432/kogito" - QUARKUS_DATASOURCE_USERNAME: kogito-user - QUARKUS_DATASOURCE_PASSWORD: kogito-pass - KAFKA_BOOTSTRAP_SERVERS: kafka:29092 - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - KOGITO_DATA_INDEX_PROPS: -Dquarkus.hibernate-orm.database.generation=update - - management-console: - container_name: management-console - image: quay.io/kiegroup/kogito-management-console:${KOGITO_VERSION} - ports: - - "8280:8080" - depends_on: - data-index: - condition: service_started - keycloak: - condition: service_healthy - volumes: - - ../target/classes/META-INF/processSVG/:/home/kogito/data/svg/ - environment: - KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - KOGITO_MANAGEMENT_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://localhost:8480/auth - -Dkogito.consoles.keycloak.config.health-check-url=http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration - -Dkogito.svg.folder.path=/home/kogito/data/svg - - task-console: - container_name: task-console - image: quay.io/kiegroup/kogito-task-console:${KOGITO_VERSION} - ports: - - "8380:8080" - depends_on: - data-index: - condition: service_started - keycloak: - condition: service_healthy - environment: - KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - KOGITO_TASK_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://localhost:8480/auth - -Dkogito.consoles.keycloak.config.health-check-url=http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration - - example-runtime-service: - container_name: example-runtime-service - image: dev.local/${USER}/process-usertasks-quarkus-with-console:1.0-SNAPSHOT - ports: - - "8080:8080" - depends_on: - kafka: - condition: service_started - postgres: - condition: service_healthy - data-index: - condition: service_started - volumes: - - ./../target/classes/META-INF/processSVG/:/home/kogito/data/svg/ - environment: - QUARKUS_DATASOURCE_JDBC_URL: "jdbc:postgresql://postgres:5432/kogito" - QUARKUS_DATASOURCE_USERNAME: kogito-user - QUARKUS_DATASOURCE_PASSWORD: kogito-pass - QUARKUS_DATASOURCE_DB_KIND: postgresql - KAFKA_BOOTSTRAP_SERVERS: kafka:29092 - KOGITO_SERVICE_URL: http://example-runtime-service:8080 - KOGITO_DATAINDEX_HTTP_URL: http://data-index:8180 - QUARKUS_FLYWAY_BASELINE_ON_MIGRATE: "true" - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - extra_hosts: - - "data-index:host-gateway" \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/infinispan/infinispan.xml b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/infinispan/infinispan.xml deleted file mode 100755 index a466561b9f..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/infinispan/infinispan.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/keycloak/kogito-realm.json b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/keycloak/kogito-realm.json deleted file mode 100644 index fd3cdc0942..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/keycloak/kogito-realm.json +++ /dev/null @@ -1,2242 +0,0 @@ -{ - "realm": "kogito", - "notBefore": 0, - "revokeRefreshToken": false, - "refreshTokenMaxReuse": 0, - "accessTokenLifespan": 300, - "accessTokenLifespanForImplicitFlow": 900, - "ssoSessionIdleTimeout": 1800, - "ssoSessionMaxLifespan": 36000, - "ssoSessionIdleTimeoutRememberMe": 0, - "ssoSessionMaxLifespanRememberMe": 0, - "offlineSessionIdleTimeout": 2592000, - "offlineSessionMaxLifespanEnabled": false, - "offlineSessionMaxLifespan": 5184000, - "accessCodeLifespan": 60, - "accessCodeLifespanUserAction": 300, - "accessCodeLifespanLogin": 1800, - "actionTokenGeneratedByAdminLifespan": 43200, - "actionTokenGeneratedByUserLifespan": 300, - "enabled": true, - "sslRequired": "external", - "registrationAllowed": false, - "registrationEmailAsUsername": false, - "rememberMe": false, - "verifyEmail": false, - "loginWithEmailAllowed": true, - "duplicateEmailsAllowed": false, - "resetPasswordAllowed": false, - "editUsernameAllowed": false, - "bruteForceProtected": false, - "permanentLockout": false, - "maxFailureWaitSeconds": 900, - "minimumQuickLoginWaitSeconds": 60, - "waitIncrementSeconds": 60, - "quickLoginCheckMilliSeconds": 1000, - "maxDeltaTimeSeconds": 43200, - "failureFactor": 30, - "roles": { - "realm": [ - { - "name": "managers", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "uma_authorization", - "description": "${role_uma_authorization}", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "admin", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "user", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "HR", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "IT", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "offline_access", - "description": "${role_offline-access}", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - } - ], - "client": { - "realm-management": [ - { - "name": "manage-identity-providers", - "description": "${role_manage-identity-providers}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "impersonation", - "description": "${role_impersonation}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-identity-providers", - "description": "${role_view-identity-providers}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-realm", - "description": "${role_view-realm}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-users", - "description": "${role_query-users}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-clients", - "description": "${role_manage-clients}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-events", - "description": "${role_manage-events}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "realm-admin", - "description": "${role_realm-admin}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "impersonation", - "manage-identity-providers", - "view-identity-providers", - "view-realm", - "query-users", - "manage-clients", - "manage-events", - "manage-realm", - "view-authorization", - "manage-authorization", - "view-users", - "create-client", - "query-clients", - "query-groups", - "manage-users", - "view-clients", - "view-events", - "query-realms" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-realm", - "description": "${role_manage-realm}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-authorization", - "description": "${role_view-authorization}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-authorization", - "description": "${role_manage-authorization}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "create-client", - "description": "${role_create-client}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-users", - "description": "${role_view-users}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "query-groups", - "query-users" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-clients", - "description": "${role_query-clients}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-groups", - "description": "${role_query-groups}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-users", - "description": "${role_manage-users}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-clients", - "description": "${role_view-clients}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "query-clients" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-events", - "description": "${role_view-events}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-realms", - "description": "${role_query-realms}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - } - ], - "security-admin-console": [], - "admin-cli": [], - "kogito-service": [ - { - "name": "uma_protection", - "composite": false, - "clientRole": true, - "containerId": "0ac5df91-e044-4051-bd03-106a3a5fb9cc", - "attributes": {} - } - ], - "broker": [ - { - "name": "read-token", - "description": "${role_read-token}", - "composite": false, - "clientRole": true, - "containerId": "53d4fe53-a039-471e-886a-28eddc950e95", - "attributes": {} - } - ], - "account": [ - { - "name": "view-profile", - "description": "${role_view-profile}", - "composite": false, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - }, - { - "name": "manage-account", - "description": "${role_manage-account}", - "composite": true, - "composites": { - "client": { - "account": [ - "manage-account-links" - ] - } - }, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - }, - { - "name": "manage-account-links", - "description": "${role_manage-account-links}", - "composite": false, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - } - ] - } - }, - "groups": [], - "defaultRoles": [ - "uma_authorization", - "offline_access" - ], - "requiredCredentials": [ - "password" - ], - "otpPolicyType": "totp", - "otpPolicyAlgorithm": "HmacSHA1", - "otpPolicyInitialCounter": 0, - "otpPolicyDigits": 6, - "otpPolicyLookAheadWindow": 1, - "otpPolicyPeriod": 30, - "otpSupportedApplications": [ - "FreeOTP", - "Google Authenticator" - ], - "scopeMappings": [ - { - "clientScope": "offline_access", - "roles": [ - "offline_access" - ] - } - ], - "clients": [ - { - "clientId": "account", - "name": "${client_account}", - "baseUrl": "/auth/realms/kogito/account", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "0136c3ef-0dfd-4b13-a6d0-2c8b6358edec", - "defaultRoles": [ - "view-profile", - "manage-account" - ], - "redirectUris": [ - "/auth/realms/kogito/account/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "admin-cli", - "name": "${client_admin-cli}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "a951803a-79c7-46a6-8197-e32835286971", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": false, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "broker", - "name": "${client_broker}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "e1f7edd7-e15c-43b4-8736-ff8204d16836", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-frontend", - "rootUrl": "http://localhost:8082", - "adminUrl": "http://localhost:8082", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8082/*" - ], - "webOrigins": [ - "http://localhost:8082" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "kogito-app", - "rootUrl": "http://localhost:8080", - "adminUrl": "http://localhost:8080", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8080/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "kogito-service", - "rootUrl": "", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": true, - "authorizationServicesEnabled": true, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "name": "Client ID", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientId", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientId", - "jsonType.label": "String" - } - }, - { - "name": "Client IP Address", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientAddress", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientAddress", - "jsonType.label": "String" - } - }, - { - "name": "Client Host", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientHost", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientHost", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "authorizationSettings": { - "allowRemoteResourceManagement": true, - "policyEnforcementMode": "ENFORCING", - "resources": [ - { - "name": "User Resource", - "ownerManagedAccess": false, - "attributes": {}, - "_id": "df1b74a9-3f10-499d-a581-368de48e512b", - "uris": [ - "/api/users/*" - ] - }, - { - "name": "Administration Resource", - "ownerManagedAccess": false, - "attributes": {}, - "_id": "7124e2f1-e6dc-44b4-87ab-24b010090b97", - "uris": [ - "/api/admin/*" - ] - } - ], - "policies": [ - { - "name": "Any User Policy", - "description": "Any user granted with the user role can access something", - "type": "role", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "roles": "[{\"id\":\"user\",\"required\":false}]" - } - }, - { - "name": "Only Administrators", - "description": "Only administrators can access", - "type": "role", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "roles": "[{\"id\":\"admin\",\"required\":false}]" - } - }, - { - "name": "User Resource Permission", - "type": "resource", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "resources": "[\"User Resource\"]", - "applyPolicies": "[\"Any User Policy\"]" - } - }, - { - "name": "Administration Resource Permission", - "type": "resource", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "resources": "[\"Administration Resource\"]", - "applyPolicies": "[\"Only Administrators\"]" - } - } - ], - "scopes": [], - "decisionStrategy": "UNANIMOUS" - } - }, - { - "clientId": "kogito-console-react", - "rootUrl": "http://localhost:9000", - "adminUrl": "http://localhost:9000/", - "baseUrl": "http://localhost:9000/", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "http://localhost:9000/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-console-quarkus", - "rootUrl": "http://localhost:8380", - "adminUrl": "http://localhost:8380/", - "baseUrl": "http://localhost:8380/", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "http://localhost:8380/*", - "http://localhost:8280/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "name": "groups", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "user.attribute": "foo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "groups", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-jobs-service", - "rootUrl": "http://localhost:8080", - "adminUrl": "http://localhost:8080", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8080/*" - ], - "webOrigins": [ - "http://localhost:8080" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "realm-management", - "name": "${client_realm-management}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "c41b709a-a012-4c69-89d7-4f926dba0619", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": true, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "security-admin-console", - "name": "${client_security-admin-console}", - "baseUrl": "/auth/admin/kogito/console/index.html", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "e571b211-2550-475d-b87f-116ff54091ee", - "redirectUris": [ - "/auth/admin/kogito/console/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "protocolMappers": [ - { - "name": "locale", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "locale", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "locale", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - } - ], - "clientScopes": [ - { - "name": "address", - "description": "OpenID Connect built-in scope: address", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${addressScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "address", - "protocol": "openid-connect", - "protocolMapper": "oidc-address-mapper", - "consentRequired": false, - "config": { - "user.attribute.formatted": "formatted", - "user.attribute.country": "country", - "user.attribute.postal_code": "postal_code", - "userinfo.token.claim": "true", - "user.attribute.street": "street", - "id.token.claim": "true", - "user.attribute.region": "region", - "access.token.claim": "true", - "user.attribute.locality": "locality" - } - } - ] - }, - { - "name": "email", - "description": "OpenID Connect built-in scope: email", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${emailScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "email", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "email", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "email", - "jsonType.label": "String" - } - }, - { - "name": "email verified", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "emailVerified", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "email_verified", - "jsonType.label": "boolean" - } - } - ] - }, - { - "name": "microprofile-jwt", - "description": "Microprofile - JWT built-in scope", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "false" - }, - "protocolMappers": [ - { - "name": "upn", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "username", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "upn", - "jsonType.label": "String" - } - }, - { - "name": "groups", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "user.attribute": "foo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "groups", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "offline_access", - "description": "OpenID Connect built-in scope: offline_access", - "protocol": "openid-connect", - "attributes": { - "consent.screen.text": "${offlineAccessScopeConsentText}", - "display.on.consent.screen": "true" - } - }, - { - "name": "phone", - "description": "OpenID Connect built-in scope: phone", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${phoneScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "phone number verified", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "phoneNumberVerified", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "phone_number_verified", - "jsonType.label": "boolean" - } - }, - { - "name": "phone number", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "phoneNumber", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "phone_number", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "profile", - "description": "OpenID Connect built-in scope: profile", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${profileScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "nickname", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "nickname", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "nickname", - "jsonType.label": "String" - } - }, - { - "name": "zoneinfo", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "zoneinfo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "zoneinfo", - "jsonType.label": "String" - } - }, - { - "name": "updated at", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "updatedAt", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "updated_at", - "jsonType.label": "String" - } - }, - { - "name": "birthdate", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "birthdate", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "birthdate", - "jsonType.label": "String" - } - }, - { - "name": "given name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "firstName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "given_name", - "jsonType.label": "String" - } - }, - { - "name": "full name", - "protocol": "openid-connect", - "protocolMapper": "oidc-full-name-mapper", - "consentRequired": false, - "config": { - "id.token.claim": "true", - "access.token.claim": "true", - "userinfo.token.claim": "true" - } - }, - { - "name": "middle name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "middleName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "middle_name", - "jsonType.label": "String" - } - }, - { - "name": "username", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "username", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "preferred_username", - "jsonType.label": "String" - } - }, - { - "name": "family name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "lastName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "family_name", - "jsonType.label": "String" - } - }, - { - "name": "gender", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "gender", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "gender", - "jsonType.label": "String" - } - }, - { - "name": "picture", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "picture", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "picture", - "jsonType.label": "String" - } - }, - { - "name": "locale", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "locale", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "locale", - "jsonType.label": "String" - } - }, - { - "name": "profile", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "profile", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "profile", - "jsonType.label": "String" - } - }, - { - "name": "website", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "website", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "website", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "role_list", - "description": "SAML role list", - "protocol": "saml", - "attributes": { - "consent.screen.text": "${samlRoleListScopeConsentText}", - "display.on.consent.screen": "true" - }, - "protocolMappers": [ - { - "name": "role list", - "protocol": "saml", - "protocolMapper": "saml-role-list-mapper", - "consentRequired": false, - "config": { - "single": "false", - "attribute.nameformat": "Basic", - "attribute.name": "Role" - } - } - ] - }, - { - "name": "roles", - "description": "OpenID Connect scope for add user roles to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "false", - "display.on.consent.screen": "true", - "consent.screen.text": "${rolesScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "realm roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "realm_access.roles", - "jsonType.label": "String", - "multivalued": "true" - } - }, - { - "name": "audience resolve", - "protocol": "openid-connect", - "protocolMapper": "oidc-audience-resolve-mapper", - "consentRequired": false, - "config": {} - }, - { - "name": "client roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-client-role-mapper", - "consentRequired": false, - "config": { - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "resource_access.${client_id}.roles", - "jsonType.label": "String", - "multivalued": "true" - } - } - ] - }, - { - "name": "web-origins", - "description": "OpenID Connect scope for add allowed web origins to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "false", - "display.on.consent.screen": "false", - "consent.screen.text": "" - }, - "protocolMappers": [ - { - "name": "allowed web origins", - "protocol": "openid-connect", - "protocolMapper": "oidc-allowed-origins-mapper", - "consentRequired": false, - "config": {} - } - ] - } - ], - "defaultDefaultClientScopes": [ - "role_list", - "profile", - "email", - "roles", - "web-origins" - ], - "defaultOptionalClientScopes": [ - "offline_access", - "address", - "phone", - "microprofile-jwt" - ], - "browserSecurityHeaders": { - "contentSecurityPolicyReportOnly": "", - "xContentTypeOptions": "nosniff", - "xRobotsTag": "none", - "xFrameOptions": "SAMEORIGIN", - "xXSSProtection": "1; mode=block", - "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", - "strictTransportSecurity": "max-age=31536000; includeSubDomains" - }, - "smtpServer": {}, - "eventsEnabled": false, - "eventsListeners": [ - "jboss-logging" - ], - "enabledEventTypes": [], - "adminEventsEnabled": false, - "adminEventsDetailsEnabled": false, - "components": { - "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ - { - "name": "Allowed Protocol Mapper Types", - "providerId": "allowed-protocol-mappers", - "subType": "anonymous", - "subComponents": {}, - "config": { - "allowed-protocol-mapper-types": [ - "oidc-full-name-mapper", - "saml-user-attribute-mapper", - "saml-user-property-mapper", - "oidc-address-mapper", - "saml-role-list-mapper", - "oidc-sha256-pairwise-sub-mapper", - "oidc-usermodel-attribute-mapper", - "oidc-usermodel-property-mapper" - ] - } - }, - { - "name": "Allowed Client Scopes", - "providerId": "allowed-client-templates", - "subType": "authenticated", - "subComponents": {}, - "config": { - "allow-default-scopes": [ - "true" - ] - } - }, - { - "name": "Allowed Client Scopes", - "providerId": "allowed-client-templates", - "subType": "anonymous", - "subComponents": {}, - "config": { - "allow-default-scopes": [ - "true" - ] - } - }, - { - "name": "Trusted Hosts", - "providerId": "trusted-hosts", - "subType": "anonymous", - "subComponents": {}, - "config": { - "host-sending-registration-request-must-match": [ - "true" - ], - "client-uris-must-match": [ - "true" - ] - } - }, - { - "name": "Full Scope Disabled", - "providerId": "scope", - "subType": "anonymous", - "subComponents": {}, - "config": {} - }, - { - "name": "Max Clients Limit", - "providerId": "max-clients", - "subType": "anonymous", - "subComponents": {}, - "config": { - "max-clients": [ - "200" - ] - } - }, - { - "name": "Consent Required", - "providerId": "consent-required", - "subType": "anonymous", - "subComponents": {}, - "config": {} - }, - { - "name": "Allowed Protocol Mapper Types", - "providerId": "allowed-protocol-mappers", - "subType": "authenticated", - "subComponents": {}, - "config": { - "allowed-protocol-mapper-types": [ - "saml-user-attribute-mapper", - "oidc-full-name-mapper", - "saml-role-list-mapper", - "saml-user-property-mapper", - "oidc-usermodel-attribute-mapper", - "oidc-address-mapper", - "oidc-usermodel-property-mapper", - "oidc-sha256-pairwise-sub-mapper" - ] - } - } - ], - "org.keycloak.keys.KeyProvider": [ - { - "name": "rsa-generated", - "providerId": "rsa-generated", - "subComponents": {}, - "config": { - "privateKey": [ - "MIIEowIBAAKCAQEAn5T13suF8mlS+pJXp0U1bto41nW55wpcs+Rps8ZVCRyJKWqzwSCYnI7lm0rB2wBpAAO4OPoj1zlmVoFmBPsDU9Xf7rjsJb5LIzIQDCZY44aSDZt6RR+gakPiQvlzHyW/RozYpngDJF7TsTD7rdRF1xQ4RprfBF8fwK/xsU7pxbeom5xDHZhz3fiw8s+7UdbmnazDHfAjU58aUrLGgVRfUsuoHjtsptYlOIXEifaeMetXZE+HhqLYRHQPDap5fbBJl773Trosn7N9nmzN4x1xxGj9So21WC5UboQs9sAIVgizc4omjZ5Y4RN9HLH7G4YwJctNntzmnJhDui9zAO+zSQIDAQABAoIBADi+F7rTtVoft0Cfnok8o6Y58/HVxHdxiMryUd95iy0FN4RBi48FTx6D9QKFz25Ws/8sU2n3D51srIXf1u24b1N0/f39RQKaqk7mcyxOylaEuBQcj5pah4ihgKd92UBfBKdKV5LBo6RgD3e2yhbiHr8+UlBQqzH7vOef6Bm6zIbfmi3N88swAJhP0YizRZFklsbmLsK6nkwyro00CHJvPVKSBbM+ad+/zIBsLw56MvNngB5TuFguUgoljd6M1T2z4utmZGlTUqrfE1onAVLJZoGnRohyIr7dJEg6YxWR70PxsgmkDKyeRvet9P1trO0n+OSprusfrC3cHJStabap1V0CgYEA1A/CtsqTnjdYYsB19eumZgdpzUgNc/YEAzZ/OWb8yTLoB2ncci+63A1rXHUXAqJFY7vtjn5mxv7SuASNbUrzq+6KfZvC1x9XEtnczqT/ypunNfxmIZuj8Nuu6vtURguZ8kPPwdkI8toTizRFeRE5ZDBvoQryiEVYugfHaHT5vzsCgYEAwKWODwquI0Lv9BuwdNVrBXQpkKh3ZfYOA7i9xvhxlM7xUu8OMCwwCPn3r7vrW5APjTqX4h330mJ44SLEs+7gbCUs4BbJBLA6g0ChlHa9PTkxp6tk2nDF/B34fxiZSRkE85L+d+at0Dc3hnlzLCJCzJawGpoPniPU9e4w0p4dN0sCgYAsGnMGjS8SUrRhJWHjGXVr9tK8TOXvXhULjgP7rj2Yoqu7Dvs4DFEyft/7RKbad2EzEtyfLA64CDtO5jN7rYDsGxpWcVSeZPg5BXJ0z8AbJTArfCjJiJMZ/rZsTIUEZFlKF2xYBolj6JLz+pUQTtK+0YwF1D8ItFN1rTR9twZSDQKBgQC6sPXNX+VH6LuPTjIf1x8CxwLs3EXxOpV0R9kp9GRl+HJnk6GlT30xhcThufQo5KAdllXQXIhoiuNoEoCbevhj9Vbax1oBQCNERSMRNEzKAx46xd9TzYwgeo7x5E3QR/3DaoVOfu+cY5ZcrF/PulgP2kxJS1mtQD5GIpGP2oinpwKBgGqiqTFPqRcelx76vBvTU+Jp1zM62T4AotbMrSQR/oUvqHe5Ytj/SbZx+wbbHAiyGgV700Mosyviik83YEAbR3kdOPjgYvAJJW2Y3jEMdQ7MwriXz8XLh5BGmYfVjkSOJXed9ua9WlYLKOJeXXv191BbDvrx5NXuJyVVU4vJx3YZ" - ], - "certificate": [ - "MIICnTCCAYUCBgFp4EYIrjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdwcm90ZWFuMB4XDTE5MDQwMjIyNTYxOVoXDTI5MDQwMjIyNTc1OVowEjEQMA4GA1UEAwwHcHJvdGVhbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+U9d7LhfJpUvqSV6dFNW7aONZ1uecKXLPkabPGVQkciSlqs8EgmJyO5ZtKwdsAaQADuDj6I9c5ZlaBZgT7A1PV3+647CW+SyMyEAwmWOOGkg2bekUfoGpD4kL5cx8lv0aM2KZ4AyRe07Ew+63URdcUOEaa3wRfH8Cv8bFO6cW3qJucQx2Yc934sPLPu1HW5p2swx3wI1OfGlKyxoFUX1LLqB47bKbWJTiFxIn2njHrV2RPh4ai2ER0Dw2qeX2wSZe+9066LJ+zfZ5szeMdccRo/UqNtVguVG6ELPbACFYIs3OKJo2eWOETfRyx+xuGMCXLTZ7c5pyYQ7ovcwDvs0kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAVtmRKDb4OK5iSA46tagMBkp6L7WuPpCWuHGWwobEP+BecYsShW7zP3s12oA8SNSwbhvu0CRqgzxhuypgf3hKQFVU153Erv4hzkj+8S0s5LR/ZE7tDNY2lzJ3yQKXy3Md7EkuzzvOZ50MTrcSKAanWq/ZW1OTnrtGymj5zGJnTg7mMnJzEIGePxkvPu/QdchiPBLqxfZYm1jsFGY25djOC3N/KmVcRVmPRGuu6D8tBFHlKoPfZYPdbMvsvs24aupHKRcZ+ofTCpK+2Qo8c0pSSqeEYHGmuGqC6lC6ozxtxSABPO9Q1R1tZBU7Kg5HvXUwwmoVS3EGub46YbHqbmWMLg==" - ], - "priority": [ - "100" - ] - } - }, - { - "name": "hmac-generated", - "providerId": "hmac-generated", - "subComponents": {}, - "config": { - "kid": [ - "96afd00e-85cf-4d35-b18e-061d3813d8b2" - ], - "secret": [ - "qBFGKdUGf6xDgKphnRfoFzIzaFHJW4bYnZ9MinPFzN38X5_ctq-2u1q5RdZzeJukXvk2biHB8_s3DxWmmLZFsA" - ], - "priority": [ - "100" - ], - "algorithm": [ - "HS256" - ] - } - }, - { - "name": "aes-generated", - "providerId": "aes-generated", - "subComponents": {}, - "config": { - "kid": [ - "b04473d3-8395-4016-b455-19a9e951106b" - ], - "secret": [ - "x68mMOVdz3qKWzltzReV0g" - ], - "priority": [ - "100" - ] - } - } - ] - }, - "internationalizationEnabled": false, - "supportedLocales": [], - "authenticationFlows": [ - { - "alias": "Handle Existing Account", - "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-confirm-link", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "idp-email-verification", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "Verify Existing Account by Re-authentication", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "Verify Existing Account by Re-authentication", - "description": "Reauthentication of existing account", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-username-password-form", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-otp-form", - "requirement": "OPTIONAL", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "browser", - "description": "browser based authentication", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "auth-cookie", - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-spnego", - "requirement": "DISABLED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "identity-provider-redirector", - "requirement": "ALTERNATIVE", - "priority": 25, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "forms", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "clients", - "description": "Base authentication for clients", - "providerId": "client-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "client-secret", - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-jwt", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-secret-jwt", - "requirement": "ALTERNATIVE", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-x509", - "requirement": "ALTERNATIVE", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "direct grant", - "description": "OpenID Connect Resource Owner Grant", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "direct-grant-validate-username", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "direct-grant-validate-password", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "direct-grant-validate-otp", - "requirement": "OPTIONAL", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "docker auth", - "description": "Used by Docker clients to authenticate against the IDP", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "docker-http-basic-authenticator", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "first broker login", - "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticatorConfig": "review profile config", - "authenticator": "idp-review-profile", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorConfig": "create unique user config", - "authenticator": "idp-create-user-if-unique", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "Handle Existing Account", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "forms", - "description": "Username, password, otp and other auth forms.", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "auth-username-password-form", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-otp-form", - "requirement": "OPTIONAL", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "http challenge", - "description": "An authentication flow based on challenge-response HTTP Authentication Schemes", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "no-cookie-redirect", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "basic-auth", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "basic-auth-otp", - "requirement": "DISABLED", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-spnego", - "requirement": "DISABLED", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "registration", - "description": "registration flow", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "registration-page-form", - "requirement": "REQUIRED", - "priority": 10, - "flowAlias": "registration form", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "registration form", - "description": "registration form", - "providerId": "form-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "registration-user-creation", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-profile-action", - "requirement": "REQUIRED", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-password-action", - "requirement": "REQUIRED", - "priority": 50, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-recaptcha-action", - "requirement": "DISABLED", - "priority": 60, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "reset credentials", - "description": "Reset credentials for a user if they forgot their password or something", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "reset-credentials-choose-user", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-credential-email", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-password", - "requirement": "REQUIRED", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-otp", - "requirement": "OPTIONAL", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "saml ecp", - "description": "SAML ECP Profile Authentication Flow", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "http-basic-authenticator", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - } - ], - "authenticatorConfig": [ - { - "alias": "create unique user config", - "config": { - "require.password.update.after.registration": "false" - } - }, - { - "alias": "review profile config", - "config": { - "update.profile.on.first.login": "missing" - } - } - ], - "requiredActions": [ - { - "alias": "CONFIGURE_TOTP", - "name": "Configure OTP", - "providerId": "CONFIGURE_TOTP", - "enabled": true, - "defaultAction": false, - "priority": 10, - "config": {} - }, - { - "alias": "terms_and_conditions", - "name": "Terms and Conditions", - "providerId": "terms_and_conditions", - "enabled": false, - "defaultAction": false, - "priority": 20, - "config": {} - }, - { - "alias": "UPDATE_PASSWORD", - "name": "Update Password", - "providerId": "UPDATE_PASSWORD", - "enabled": true, - "defaultAction": false, - "priority": 30, - "config": {} - }, - { - "alias": "UPDATE_PROFILE", - "name": "Update Profile", - "providerId": "UPDATE_PROFILE", - "enabled": true, - "defaultAction": false, - "priority": 40, - "config": {} - }, - { - "alias": "VERIFY_EMAIL", - "name": "Verify Email", - "providerId": "VERIFY_EMAIL", - "enabled": true, - "defaultAction": false, - "priority": 50, - "config": {} - } - ], - "browserFlow": "browser", - "registrationFlow": "registration", - "directGrantFlow": "direct grant", - "resetCredentialsFlow": "reset credentials", - "clientAuthenticationFlow": "clients", - "dockerAuthenticationFlow": "docker auth", - "attributes": { - "_browser_header.xXSSProtection": "1; mode=block", - "_browser_header.xFrameOptions": "SAMEORIGIN", - "_browser_header.strictTransportSecurity": "max-age=31536000; includeSubDomains", - "permanentLockout": "false", - "quickLoginCheckMilliSeconds": "1000", - "_browser_header.xRobotsTag": "none", - "maxFailureWaitSeconds": "900", - "minimumQuickLoginWaitSeconds": "60", - "failureFactor": "30", - "actionTokenGeneratedByUserLifespan": "300", - "maxDeltaTimeSeconds": "43200", - "_browser_header.xContentTypeOptions": "nosniff", - "offlineSessionMaxLifespan": "5184000", - "actionTokenGeneratedByAdminLifespan": "43200", - "_browser_header.contentSecurityPolicyReportOnly": "", - "bruteForceProtected": "false", - "_browser_header.contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", - "waitIncrementSeconds": "60", - "offlineSessionMaxLifespanEnabled": "false" - }, - "users": [ - { - "username": "admin", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "NICTtwsvSxJ5hL8hLAuleDUv9jwZcuXgxviMXvR++cciyPtiIEStEaJUyfA9DOir59awjPrHOumsclPVjNBplA==", - "salt": "T/2P5o5oxFJUEk68BRURRg==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879354, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "admin", - "managers", - "user", - "IT", - "HR" - ], - "notBefore": 0, - "groups": [] - }, - { - "username": "alice", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "A3okqV2T/ybXTVEgKfosoSjP8Yc9IZbFP/SY4cEd6hag7TABQrQ6nUSuwagGt96l8cw1DTijO75PqX6uiTXMzw==", - "salt": "sl4mXx6T9FypPH/s9TngfQ==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879116, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "user", - "HR" - ], - "notBefore": 0, - "groups": [] - }, - { - "username": "jdoe", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "JV3DUNLjqOadjbBOtC4rvacQI553CGaDGAzBS8MR5ReCr7SwF3E6CsW3T7/XO8ITZAsch8+A/6loeuCoVLLJrg==", - "salt": "uCbOH7HZtyDtMd0E9DG/nw==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879227, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "managers", - "user", - "IT" - ], - "notBefore": 0, - "groups": [] - } - ], - "keycloakVersion": "6.0.0", - "userManagedAccessAllowed": false -} diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/sql/init.sql b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/sql/init.sql deleted file mode 100644 index ee1a94650d..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/sql/init.sql +++ /dev/null @@ -1,20 +0,0 @@ -CREATE ROLE "kogito-user" WITH - LOGIN - SUPERUSER - INHERIT - CREATEDB - CREATEROLE - NOREPLICATION - PASSWORD 'kogito-pass'; - -CREATE DATABASE kogito - WITH - OWNER = "kogito-user" - ENCODING = 'UTF8' - LC_COLLATE = 'en_US.utf8' - LC_CTYPE = 'en_US.utf8' - TABLESPACE = pg_default - CONNECTION LIMIT = -1; - -GRANT ALL PRIVILEGES ON DATABASE kogito TO "kogito-user"; -GRANT ALL PRIVILEGES ON DATABASE kogito TO postgres; diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/startServices.sh b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/startServices.sh deleted file mode 100755 index 95273cda5a..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docker-compose/startServices.sh +++ /dev/null @@ -1,89 +0,0 @@ -#!/bin/sh -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - - -DB="postgresql" - -if [ -n "$1" ]; then - if [[ "$1" == "postgresql" || "$1" == "infinispan" ]]; - then - DB="$1" - else - echo "Usage: By default postgresql environments is started if no argument is provided" - echo " start POSTGRESQL docker-compose running: ./startServices.sh postgresql or just ./startServices.sh " - echo " start INFINISPAN docker-compose running: ./startServices.sh infinispan " - exit 1 - fi -fi -echo "Script requires your Kogito Quickstart to be compiled with the right profile: ../mvn clean install -DskipTests -P$DB,container" - -PROJECT_VERSION=$(cd ../ && mvn help:evaluate -Dexpression=project.version -q -DforceStdout) - -echo "Project version: ${PROJECT_VERSION}" - -if [[ $PROJECT_VERSION == *SNAPSHOT ]]; -then - KOGITO_VERSION="latest" -else - KOGITO_VERSION=${PROJECT_VERSION%.*} -fi - -echo "Kogito Image version: ${KOGITO_VERSION}" -echo "KOGITO_VERSION=${KOGITO_VERSION}" > ".env" - -if [ "$(uname)" == "Darwin" ]; then - echo "DOCKER_GATEWAY_HOST=kubernetes.docker.internal" >> ".env" -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - echo "DOCKER_GATEWAY_HOST=172.17.0.1" >> ".env" -fi - -if [ "$1" == "infinispan" ]; -then - PERSISTENCE_FOLDER=./persistence - KOGITO_EXAMPLE_PERSISTENCE=../target/classes/META-INF/resources/persistence/protobuf - - rm -rf $PERSISTENCE_FOLDER - - mkdir -p $PERSISTENCE_FOLDER - - if [ -d "$KOGITO_EXAMPLE_PERSISTENCE" ] - then - cp $KOGITO_EXAMPLE_PERSISTENCE/*.proto $PERSISTENCE_FOLDER/ - else - echo "$KOGITO_EXAMPLE_PERSISTENCE does not exist. Have you compiled the project? mvn clean install -DskipTests -P$DB" - exit 1 - fi -fi - -SVG_FOLDER=./svg - -KOGITO_EXAMPLE_SVG_FOLDER=../target/classes/META-INF/processSVG - -mkdir -p $SVG_FOLDER - -if [ -d "$KOGITO_EXAMPLE_SVG_FOLDER" ] -then - cp $KOGITO_EXAMPLE_SVG_FOLDER/*.svg $SVG_FOLDER -else - echo "$KOGITO_EXAMPLE_SVG_FOLDER does not exist. Have you compiled the project?" - exit 1 -fi - -docker-compose -f docker-compose-$DB.yml up \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_details1.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_details1.png deleted file mode 100644 index 032c42b7cc..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_details1.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_details2.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_details2.png deleted file mode 100644 index 34c63dde5f..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_details2.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_details3.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_details3.png deleted file mode 100644 index a006afa0ec..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_details3.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_list1.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_list1.png deleted file mode 100644 index acc542434e..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/MC_list1.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_HRInterview.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_HRInterview.png deleted file mode 100644 index bd37aaa043..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_HRInterview.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_HRInterview_complete.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_HRInterview_complete.png deleted file mode 100644 index 5a92418c6a..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_HRInterview_complete.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_ITInterview.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_ITInterview.png deleted file mode 100644 index c6aa8d17e4..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_ITInterview.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_list1.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_list1.png deleted file mode 100644 index 273a93d400..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_list1.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_list2.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_list2.png deleted file mode 100644 index fd60813c94..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_list2.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_list3.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_list3.png deleted file mode 100644 index 5584c84357..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/TC_list3.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/hiring.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/hiring.png deleted file mode 100644 index 920d11c15f..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/hiring.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/hr-interview-assignments.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/hr-interview-assignments.png deleted file mode 100644 index 62ac3918c1..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/hr-interview-assignments.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/it-interview-assignments.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/it-interview-assignments.png deleted file mode 100644 index 64cc9b3381..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/it-interview-assignments.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/keycloak-login.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/keycloak-login.png deleted file mode 100644 index 58d85f1f43..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/keycloak-login.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/process-variables.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/process-variables.png deleted file mode 100644 index 5f3829d2f7..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/process-variables.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/services.png b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/services.png deleted file mode 100644 index e197b19a4b..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/docs/images/services.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/pom.xml b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/pom.xml deleted file mode 100644 index 31c387074f..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/pom.xml +++ /dev/null @@ -1,259 +0,0 @@ - - - - 4.0.0 - - org.kie.kogito.examples - kogito-quarkus-examples - 999-SNAPSHOT - - - process-usertasks-quarkus-with-console - Kogito Example :: Process with Usertasks Quarkus :: Console - - 3.2.10.Final - quarkus-bom - io.quarkus - 3.2.10.Final - org.kie.kogito - kogito-bom - 999-SNAPSHOT - 999-SNAPSHOT - - - - - ${quarkus.platform.group-id} - ${quarkus.platform.artifact-id} - ${quarkus.platform.version} - pom - import - - - ${kogito.bom.group-id} - ${kogito.bom.artifact-id} - ${kogito.bom.version} - pom - import - - - - - - org.jbpm - jbpm-with-drools-quarkus - - - io.quarkus - quarkus-resteasy - - - io.quarkus - quarkus-resteasy-jackson - - - io.quarkus - quarkus-arc - - - - io.quarkus - quarkus-smallrye-reactive-messaging-kafka - - - io.quarkus - quarkus-smallrye-openapi - - - io.quarkus - quarkus-smallrye-health - - - - org.kie - kie-addons-quarkus-events-process - - - org.kie - kie-addons-quarkus-process-management - - - - org.kie - kie-addons-quarkus-process-svg - - - - io.quarkus - quarkus-junit5 - test - - - io.rest-assured - rest-assured - test - - - org.kie.kogito - kogito-quarkus-test-utils - ${version.org.kie.kogito} - test - - - org.kie - kie-addons-quarkus-source-files - - - - - ${project.artifactId} - - - ${quarkus.platform.group-id} - quarkus-maven-plugin - ${quarkus-plugin.version} - - - - build - - - - - - - - - - default - - true - - - - org.kie - kie-addons-quarkus-persistence-infinispan - - - - - - infinispan - - infinispan - true - - - - org.kie - kie-addons-quarkus-persistence-infinispan - - - - - - maven-antrun-plugin - - - package - - run - - - - - - - - - - - - - - - - - - - postgresql - - postgresql - true - - - - org.kie - kie-addons-quarkus-persistence-jdbc - - - io.quarkus - quarkus-jdbc-postgresql - - - io.quarkus - quarkus-agroal - - - - - - maven-antrun-plugin - - - package - - run - - - - - - - - - - - - - - - - container - - - container - - - - container - - - - io.quarkus - quarkus-container-image-jib - - - - - - diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/java/org/kie/kogito/hr/Candidate.java b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/java/org/kie/kogito/hr/Candidate.java deleted file mode 100644 index 49f29580a5..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/java/org/kie/kogito/hr/Candidate.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.kie.kogito.hr; - -public class Candidate { - - private String name; - private String email; - private Integer salary; - private String skills; - - public Candidate() { - } - - public Candidate(String name, String email, Integer salary, String skills) { - this.name = name; - this.email = email; - this.salary = salary; - this.skills = skills; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public Integer getSalary() { - return salary; - } - - public void setSalary(Integer salary) { - this.salary = salary; - } - - public String getSkills() { - return skills; - } - - public void setSkills(String skills) { - this.skills = skills; - } -} diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/META-INF/processSVG/hiring.svg b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/META-INF/processSVG/hiring.svg deleted file mode 100644 index af9a9a4c6a..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/META-INF/processSVG/hiring.svg +++ /dev/null @@ -1 +0,0 @@ -HR InterviewIT Interview \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/META-INF/resources/index.html b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/META-INF/resources/index.html deleted file mode 100644 index c9d1ca0c76..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/META-INF/resources/index.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - Kogito quickstart - - - - - - - - - - - - - - -
-
-
-
-

Welcome to Kogito

-

- Cloud-native business automation for building intelligent applications, backed by - battle-tested capabilities. -

- - Get Started - - - Latest updates - -
-
-
-
-
-
-
-

Quick Links

- -
-
-
- - - \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/application.properties b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/application.properties deleted file mode 100644 index 71dcf17d37..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/application.properties +++ /dev/null @@ -1,83 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# Packaging -#quarkus.package.type=fast-jar - -#https://quarkus.io/guides/openapi-swaggerui -quarkus.http.cors=true -quarkus.smallrye-openapi.path=/docs/openapi.json -quarkus.swagger-ui.always-include=true - -kogito.service.url=http://localhost:8080 -kogito.dataindex.http.url=http://localhost:8180 -kogito.dataindex.ws.url=ws://localhost:8180 -kafka.bootstrap.servers=localhost:9092 -## metadata - -#mp.messaging.outgoing.kogito-processinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-processinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-processinstances-events.topic=kogito-processinstances-events -mp.messaging.outgoing.kogito-processinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-usertaskinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-usertaskinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-usertaskinstances-events.topic=kogito-usertaskinstances-events -mp.messaging.outgoing.kogito-usertaskinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-variables-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-variables-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-variables-events.topic=kogito-variables-events -mp.messaging.outgoing.kogito-variables-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -mp.messaging.outgoing.kogito-processdefinitions-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-processdefinitions-events.topic=kogito-processdefinitions-events -mp.messaging.outgoing.kogito-processdefinitions-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - - - -%postgresql.kogito.persistence.type=jdbc -%postgresql.quarkus.datasource.db-kind=postgresql -%postgresql.quarkus.datasource.username=kogito-user -%postgresql.quarkus.datasource.password=kogito-pass -%postgresql.quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/kogito -%postgresql.quarkus.kogito.devservices.enabled=false -%postgresql.quarkus.flyway.migrate-at-start=true -%infinispan.kogito.persistence.type=infinispan -%infinispan.quarkus.infinispan-client.hosts=localhost:11222 -%infinispan.quarkus.infinispan-client.use-auth=false -%infinispan.quarkus.kogito.devservices.enabled=false - -kogito.users.admin.groups=admin -kogito.users.jdoe.groups=admin -kogito.users.bxf.groups=admin -kogito.users.test.groups=admin -kogito.users.user.groups=user - -quarkus.http.cors.origins=http://localhost:${quarkus.http.port} - -# profile to pack this example into a container, to use it execute activate the maven container profile, -Dcontainer -%container.quarkus.container-image.build=true -%container.quarkus.container-image.push=false -%container.quarkus.container-image.group=${USER} -%container.quarkus.container-image.registry=dev.local -%container.quarkus.container-image.tag=1.0-SNAPSHOT -%container.quarkus.jib.jvm-entrypoint=/home/kogito/kogito-app-launch.sh -%container.quarkus.jib.base-jvm-image=quay.io/kiegroup/kogito-runtime-jvm:latest -%container.quarkus.jib.working-directory=/home/kogito/bin \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/hiring.bpmn b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/hiring.bpmn deleted file mode 100644 index 925ce15331..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/main/resources/hiring.bpmn +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _27F81353-7101-4BDF-BB04-2FD45983C17F - _D762FECA-89D1-40DE-97EC-F69FA9A3E4B3 - - - - - - - _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputX - _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputX - _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputX - - - _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputX - - - - _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_TaskNameInputX - - - - - - - candidate - _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_candidateInputX - - - _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_SkippableInputX - - - - - - - _8962C15F-55EC-46F7-B926-5D5A1FD8D35E_approveOutputX - it_approval - - - - jdoe - - - - - _D762FECA-89D1-40DE-97EC-F69FA9A3E4B3 - - - - - - - - _2E69C0D9-AA97-4100-80F3-852553D7622D - _27F81353-7101-4BDF-BB04-2FD45983C17F - - - - - - - _B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputX - _B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputX - _B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputX - - - _B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputX - - - - _B8C4F63C-81AD-4291-9C1B-84967277EEF6_TaskNameInputX - - - - - - - candidate - _B8C4F63C-81AD-4291-9C1B-84967277EEF6_candidateInputX - - - _B8C4F63C-81AD-4291-9C1B-84967277EEF6_SkippableInputX - - - - - - - _B8C4F63C-81AD-4291-9C1B-84967277EEF6_approveOutputX - hr_approval - - - - jdoe - - - - - _2E69C0D9-AA97-4100-80F3-852553D7622D - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _DEbcYMK_EDmVtvGs7DWZtQ - _DEbcYMK_EDmVtvGs7DWZtQ - - \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/test/java/org/kie/kogito/hr/HiringProcessIT.java b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/test/java/org/kie/kogito/hr/HiringProcessIT.java deleted file mode 100644 index 4de5711322..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/test/java/org/kie/kogito/hr/HiringProcessIT.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.kie.kogito.hr; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.junit.jupiter.api.Test; -import org.kie.kogito.Model; -import org.kie.kogito.auth.IdentityProviders; -import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.process.Process; -import org.kie.kogito.process.ProcessInstance; -import org.kie.kogito.process.WorkItem; -import org.kie.kogito.testcontainers.quarkus.InfinispanQuarkusTestResource; -import org.kie.kogito.testcontainers.quarkus.KafkaQuarkusTestResource; - -import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.QuarkusTest; - -import jakarta.inject.Inject; -import jakarta.inject.Named; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@QuarkusTest -@QuarkusTestResource(value = InfinispanQuarkusTestResource.class) -@QuarkusTestResource(value = KafkaQuarkusTestResource.class) -public class HiringProcessIT { - - @Named("hiring") - @Inject - Process hiringProcess; - - @Test - public void testApprovalProcess() { - - assertNotNull(hiringProcess); - - Model m = hiringProcess.createModel(); - Map parameters = new HashMap<>(); - parameters.put("candidate", new Candidate("jdoe", "jdoe@example.com", 30000, "Java, Kogito")); - m.fromMap(parameters); - - ProcessInstance processInstance = hiringProcess.createInstance(m); - processInstance.start(); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("jdoe", Arrays.asList("HR", "IT"))); - - processInstance.workItems(policy); - - List workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - Map results = new HashMap<>(); - results.put("approve", true); - processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - - processInstance.workItems(policy); - - workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - - results.put("approve", false); - processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); - - Model result = (Model) processInstance.variables(); - assertEquals(3, result.toMap().size()); - assertEquals(true, result.toMap().get("hr_approval")); - assertEquals(false, result.toMap().get("it_approval")); - } -} diff --git a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/test/resources/application.properties b/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/test/resources/application.properties deleted file mode 100644 index 6242af5d67..0000000000 --- a/kogito-quarkus-examples/process-usertasks-quarkus-with-console/src/test/resources/application.properties +++ /dev/null @@ -1,59 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# Quarkus -quarkus.http.test-port=0 -quarkus.http.cors=true -quarkus.swagger-ui.always-include=true - -kogito.service.url=http://localhost:8080 -kogito.dataindex.http.url=http://localhost:8180 -kogito.dataindex.ws.url=ws://localhost:8180 - -#Kafka -kafka.bootstrap.servers=localhost:9092 - -#mp.messaging.incoming.kogito_incoming_stream.bootstrap.servers=localhost:9092 -mp.messaging.incoming.kogito_incoming_stream.connector=smallrye-kafka -mp.messaging.incoming.kogito_incoming_stream.topic=visasresponses -mp.messaging.incoming.kogito_incoming_stream.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer - -#mp.messaging.outgoing.kogito_outgoing_stream.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito_outgoing_stream.connector=smallrye-kafka -mp.messaging.outgoing.kogito_outgoing_stream.topic=visaapplications -mp.messaging.outgoing.kogito_outgoing_stream.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-processinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-processinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-processinstances-events.topic=kogito-processinstances-events -mp.messaging.outgoing.kogito-processinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-usertaskinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-usertaskinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-usertaskinstances-events.topic=kogito-usertaskinstances-events -mp.messaging.outgoing.kogito-usertaskinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-variables-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-variables-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-variables-events.topic=kogito-variables-events -mp.messaging.outgoing.kogito-variables-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -mp.messaging.outgoing.kogito-processdefinitions-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-processdefinitions-events.topic=kogito-processdefinitions-events -mp.messaging.outgoing.kogito-processdefinitions-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/docker-compose.yml b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/docker-compose.yml index 7c10e20f1e..90292e91c3 100644 --- a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/docker-compose.yml +++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/docker-compose/docker-compose.yml @@ -40,6 +40,7 @@ services: PGADMIN_DEFAULT_PASSWORD: pass PGADMIN_CONFIG_SERVER_MODE: 'False' PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED: 'False' + GUNICORN_ACCESS_LOGFILE: '/dev/null' data-index: container_name: data-index diff --git a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/pom.xml b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/pom.xml index 2388b56b22..e4c2183e2e 100644 --- a/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/pom.xml +++ b/kogito-quarkus-examples/process-usertasks-timer-data-index-persistence-addon-quarkus/pom.xml @@ -168,12 +168,6 @@ dev - - - org.jbpm - jbpm-quarkus-devui - - diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/README.md b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/README.md deleted file mode 100644 index 9c88e4641b..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/README.md +++ /dev/null @@ -1,283 +0,0 @@ -# Process user task orchestration - -## Description - -A quickstart project shows very typical user task orchestration. It comes with two tasks assigned -to human actors via group assignments - `managers`. So essentially anyone who is a member of that -group can act on the tasks. Though this example applies four eye principles which essentially means -that the user who approved the first task cannot approve the second one. So there must always be at -least two distinct managers involved. - -This example shows - -* working with user tasks -* four eye principle with user tasks -* Task console to execute human task -* Management console tracking process execution - - -

- - -## Build and run - -### Prerequisites - -You will need: - - Java 17+ installed - - Environment variable JAVA_HOME set accordingly - - Maven 3.9.6+ installed - - [jq](https://stedolan.github.io/jq) tool installed. You can download it from [here](https://stedolan.github.io/jq/download) - - Docker and Docker Compose to run the required example infrastructure. - -When using native image compilation, you will also need: - - GraalVM 20.3+ installed - - Environment variable GRAALVM_HOME set accordingly - - Note that GraalVM native image compilation typically requires other packages (glibc-devel, zlib-devel and gcc) to be installed too, please refer to GraalVM installation documentation for more details. - -### Starting the Kogito and Infrastructure Services - -This quickstart provides a docker compose template that starts all the required services. This setup ensures that all services are connected with a default configuration. - -

- -You should start all the services before you execute any of the **Approvals** example, to do that please execute: - -For Linux and MacOS: - -1. Open a Terminal -2. Go to the process-usertasks-with-security-oidc-quarkus-with-console folder at kogito-examples -3. Run the ```startServices.sh``` script - -```bash -sh ./startServices.sh -``` - -Once all services bootstrap, the following ports will be assigned on your local machine: - -- Infinispan: 11222 -- Kafka: 9092 -- Data Index: 8180 -- Management Console: 8280 -- Task Console: 8380 -- Keycloak server: 8480 -- example-runtime-service: 8080 - -> **_NOTE:_** This step requires the project to be compiled, please consider running a ```mvn clean install -Pcontainer``` command on the project root before running the ```startServices.sh``` script for the first time or any time you modify the project. - -Once started you can simply stop all services by executing the ```docker-compose stop```. - -All the created containers can be removed by executing the ```docker-compose rm```. - -### Using Keycloak as Authentication Server - -In this Quickstart we'll be using [Keycloak](https://www.keycloak.org/) as *Authentication Server*. It will be started as a part of the project *Infrastructure Services*, you can check the configuration on the project [docker-compose.yml](docker-compose/docker-compose.yml) in [docker-compose](docker-compose) folder. - -It will install the *Kogito Realm* that comes with a predefined set of users: -| Login | Password | Roles | -| ------------- | ---------- | ------------------- | -| admin | admin | *admin*, *managers* | -| alice | alice | *user* | -| jdoe | jdoe | *managers* | - -Once Keycloak is started, you should be able to access your *Keycloak Server* at [localhost:8480/auth](http://localhost:8480/auth) with *admin* user. - -### Security using OpenID Connect - -This Quickstart is taking advantage of the Quarkus OIDC extension that allows an easy integration between the *Kogito* runtime & *Kogito* consoles and *Keycloak*. - -Enabling it in the project can be done by adding the following *maven* dependency: -```xml - - io.quarkus - quarkus-oidc - -``` - -And adding the right configuration on the *application.properties* file: -```properties -quarkus.oidc.auth-server-url=http://localhost:8480/auth/realms/kogito - -quarkus.oidc.client-id=kogito-app -quarkus.oidc.credentials.secret=secret - -quarkus.http.auth.permission.authenticated.paths=/* -quarkus.http.auth.permission.authenticated.policy=authenticated -``` - -> **_NOTE:_** For more information about securing Quarkus applications with OpenID Connect, please refer to [Quarkus Documentation](https://quarkus.io/guides/security-openid-connect) - -It is also possible to enable authentication *Kogito Management Console* & *Kogito Task Console* using OpenID Connect, to do that you must start the consoles using the *keycloak* quarkus profile as a parameter (`-Dquarkus.profile=keycloak`). You can check the configuration on the project [docker-compose.yml](docker-compose/docker-compose.yml) in [docker-compose](docker-compose) folder. - -> **_NOTE:_** For more information about how to secure Kogito Management Console with OpenID Connect, please refer to [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#proc-management-console-security_kogito-developing-process-services). -> -> For more information about how to secure Kogito Task Console with OpenID Connect, please refer to [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#proc-task-console-security_kogito-developing-process-services) -> -> For more information about authorization on Quarkus applications with OpenID Connect, please refer to [Quarkus Documentation](https://quarkus.io/guides/security-openid-connect-web-authentication) - - -### Compile and Run in Local Dev Mode - -``` -mvn clean compile quarkus:dev -``` - -NOTE: With dev mode of Quarkus you can take advantage of hot reload for business assets like processes, rules, decision tables and java code. No need to redeploy or restart your running application. - -### Package and Run in JVM mode - -```sh -mvn clean package -java -jar target/quarkus-app/quarkus-run.jar -``` - -or on Windows - -```sh -mvn clean package -java -jar target\quarkus-app\quarkus-run.jar -``` - -### Package and Run using Local Native Image -Note that this requires GRAALVM_HOME to point to a valid GraalVM installation - -```sh -mvn clean package -Pnative -``` - -To run the generated native executable, generated in `target/`, execute - -```sh -./target/process-usertasks-with-security-oidc-quarkus-with-console -``` - -### Kogito Management Console - -To access the Kogito Management Console just open your browser and navigate to ``http://localhost:8280``. You'll be redirected to the *Keycloak* log in page. - -

- -

- -Once there, log in using any of the users specified in the [Using Keycloak as Authentication Server](#using-keycloak-as-authentication-server) - -

- -

- -> **_NOTE:_** For more information about how to work with Kogito Management Console, please refer to the [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#con-management-console_kogito-developing-process-services) page. - -### Kogito Task Console - -To access the Kogito Task Console just open your browser and navigate to ``http://localhost:8380``. You'll be redirected to the *Keycloak* log in page. - -

- -

- -Once there, log in with an *managers* user (for example *jdoe*) and you should be redirected to the user **Task Inbox**: - -

- -

- -There you'll see all the tasks assigned to the user or to any of the group he belongs to. - - -### Submit a request to start new approval - -The application is using bearer token authorization, the first thing to do is obtain an access token from the Keycloak -Server in order to access the application resources. Obtain an access token for user jdoe executing in a terminal: - -```sh -export access_token=$(\ - curl -X POST http://localhost:8480/auth/realms/kogito/protocol/openid-connect/token \ - --user kogito-app:secret \ - -H 'content-type: application/x-www-form-urlencoded' \ - -d 'username=jdoe&password=jdoe&grant_type=password' | jq --raw-output '.access_token' \ - ) -``` - -To make use of this application it is as simple as putting a sending request to `http://localhost:8080/approvals` with following content - -```json -{ -"traveller" : { - "firstName" : "John", - "lastName" : "Doe", - "email" : "jon.doe@example.com", - "nationality" : "American", - "address" : { - "street" : "main street", - "city" : "Boston", - "zipCode" : "10005", - "country" : "US" } - } -} -``` - -Complete curl command can be found below: - -```sh -curl -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' -H "Authorization: Bearer "$access_token -d '{"traveller" : { "firstName" : "John", "lastName" : "Doe", "email" : "jon.doe@example.com", "nationality" : "American","address" : { "street" : "main street", "city" : "Boston", "zipCode" : "10005", "country" : "US" }}}' http://localhost:8080/approvals -``` - -### Show active process instances at Kogito Management Console - -To access the Kogito Management Console just open your browser and navigate to ``http://localhost:8280``. - -

- -

- -> **_NOTE:_** For more information about how to work with Kogito Management Console, please refer to the [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#con-management-console_kogito-developing-process-services) page. - -Check the process instance details to see where is the execution path - -

- -

- -### Execute 'First Line approval' task at Kogito Task Console - -To access the Kogito Task Console just open your browser and navigate to ``http://localhost:8380`` and you should be redirected to the **Task Inbox**. -Ensure you are logged as a user with role manager to be able to see the First Line approval (i.e: jdoe / jdoe) - -

- -

- -> **_NOTE:_** For more information about how to work with Kogito Task Console, please refer to the [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#con-task-console_kogito-developing-process-services) page. - -Access to 'First Line approval' task and complete - -

- -

- -Check the process instance details at Kogito Management Console to see the execution path reflects the completed task - -

- -

- -### Execute 'Second Line approval' task at Kogito Task Console - -Access the Kogito Task Console and ensure you are logged as a user with role manager to be able to see the Second Line approval -following the second eye principle (i.e: admin / admin) - -

- -

- -Access to 'Second Line approval' task and complete - -

- -

- -Check the process instance details at Kogito Management Console, and verify the execution path is reflected in the diagram. - -

- -

diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/.gitignore b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/.gitignore deleted file mode 100644 index 1689027f92..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.env -persistence/ -svg/ \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/README.md b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/README.md deleted file mode 100644 index 53a77a9194..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/README.md +++ /dev/null @@ -1,54 +0,0 @@ -## Kogito and Infrastructure services - -To allow a quick setup of all services required to run this demo, we provide a docker compose template that starts the following services: -- Infinispan -- Kafka -- Keycloak -- Kogito Data Index -- Kogito Management Console -- Kogito Task Console - -This setup ensures that all services are connected using the default configuration as well as provisioning the Travel Agency dashboard to Grafana. - -In order to use it, please ensure you have Docker Compose installed on your machine, otherwise follow the instructions available - in [here](https://docs.docker.com/compose/install/). - -### Starting required services - - Before you execute the **Approvals** example, start all the services by following these steps: - - For Linux and MacOS: - - ./startServices.sh - - For Windows: - - Create a .env file with the content containing the version of the Kogito images you would like to run, example: - - KOGITO_VERSION=1.0.0 - - Then run - - docker-compose up - - Once all services bootstrap, the following ports will be assigned on your local machine: - - Infinispan: 11222 - - Kafka: 9092 - - Keycloak: 8480 - - Data Index: 8180 - - Management Console: 8280 - - Task Console: 8380 - -### Stopping and removing volume data - - To stop all services, simply run: - - docker-compose stop - - It is also recommended to remove any of stopped containers by running: - - docker-compose rm - - For more details please check the Docker Compose documentation. - - docker-compose --help diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/docker-compose.yml b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/docker-compose.yml deleted file mode 100644 index 8590cf89bd..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/docker-compose.yml +++ /dev/null @@ -1,162 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -version: '2.1' - -services: - - infinispan: - image: infinispan/server:14.0.4.Final - container_name: infinispan - ports: - - "11222:11222" - command: "-c infinispan-demo.xml" - volumes: - - ./infinispan/infinispan.xml:/opt/infinispan/server/conf/infinispan-demo.xml:z - healthcheck: - test: [ "CMD", "curl", "-f", "http://localhost:11222/rest/v2/cache-managers/default/health/status" ] - interval: 1s - timeout: 1s - retries: 50 - - zookeeper: - container_name: zookeeper - image: strimzi/kafka:0.20.1-kafka-2.6.0 - command: [ - "sh", "-c", - "bin/zookeeper-server-start.sh config/zookeeper.properties" - ] - ports: - - "2181:2181" - environment: - LOG_DIR: "/tmp/logs" - - kafka: - image: strimzi/kafka:0.20.1-kafka-2.6.0 - container_name: kafka - command: [ - "sh", "-c", - "bin/kafka-server-start.sh config/server.properties --override inter.broker.listener.name=$${KAFKA_INTER_BROKER_LISTENER_NAME} --override listener.security.protocol.map=$${KAFKA_LISTENER_SECURITY_PROTOCOL_MAP} --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}" - ] - depends_on: - - zookeeper - ports: - - "9092:9092" - environment: - KAFKA_BROKER_ID: 0 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://kafka:9092 - KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://localhost:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT - KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL - KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 - LOG_DIR: "/tmp/logs" - - keycloak: - container_name: keycloak - image: quay.io/keycloak/keycloak:legacy - ports: - - "8480:8080" - volumes: - - ./keycloak/kogito-realm.json:/tmp/kogito-realm.json - healthcheck: - test: [ "CMD", "curl", "-f", "http://localhost:8080/auth/realms/kogito" ] - interval: 1s - timeout: 1s - retries: 50 - environment: - KEYCLOAK_USER: admin - KEYCLOAK_PASSWORD: admin - KEYCLOAK_IMPORT: /tmp/kogito-realm.json - - data-index: - container_name: data-index - image: quay.io/kiegroup/kogito-data-index-infinispan:${KOGITO_VERSION} - ports: - - "8180:8080" - depends_on: - kafka: - condition: service_started - infinispan: - condition: service_healthy - volumes: - - ./persistence/:/home/kogito/data/protobufs/ - environment: - QUARKUS_INFINISPAN_CLIENT_HOSTS: infinispan:11222 - QUARKUS_INFINISPAN_CLIENT_USE_AUTH: "false" - KAFKA_BOOTSTRAP_SERVERS: kafka:29092 - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - KOGITO_DATA_INDEX_PROPS: -Dkogito.protobuf.folder=/home/kogito/data/protobufs/ - - management-console: - container_name: management-console - image: quay.io/kiegroup/kogito-management-console:${KOGITO_VERSION} - ports: - - 8280:8080 - depends_on: - data-index: - condition: service_started - keycloak: - condition: service_healthy - volumes: - - ./svg/:/home/kogito/data/svg/ - environment: - KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - KOGITO_MANAGEMENT_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://localhost:8480/auth -Dkogito.consoles.keycloak.config.health-check-url=http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration -Dkogito.svg.folder.path=/home/kogito/data/svg - - task-console: - container_name: task-console - image: quay.io/kiegroup/kogito-task-console:${KOGITO_VERSION} - ports: - - 8380:8080 - depends_on: - data-index: - condition: service_started - keycloak: - condition: service_healthy - environment: - KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - KOGITO_TASK_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://localhost:8480/auth -Dkogito.consoles.keycloak.config.health-check-url=http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration - - example-runtime-service: - container_name: example-runtime-service - image: dev.local/${USER}/process-usertasks-with-security-oidc-quarkus-with-console:1.0-SNAPSHOT - ports: - - "8080:8080" - depends_on: - kafka: - condition: service_started - infinispan: - condition: service_healthy - data-index: - condition: service_started - volumes: - - ./../target/classes/META-INF/processSVG/:/home/kogito/data/svg/ - environment: - QUARKUS_INFINISPAN_CLIENT_HOSTS: infinispan:11222 - QUARKUS_INFINISPAN_CLIENT_USE_AUTH: "false" - KAFKA_BOOTSTRAP_SERVERS: kafka:29092 - KOGITO_SERVICE_URL: http://example-runtime-service:8080 - KOGITO_DATAINDEX_HTTP_URL: http://data-index:8180 - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - extra_hosts: - - "data-index:host-gateway" \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/infinispan/infinispan.xml b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/infinispan/infinispan.xml deleted file mode 100644 index 7fe128d20c..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/infinispan/infinispan.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/keycloak/kogito-realm.json b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/keycloak/kogito-realm.json deleted file mode 100644 index fd3cdc0942..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/keycloak/kogito-realm.json +++ /dev/null @@ -1,2242 +0,0 @@ -{ - "realm": "kogito", - "notBefore": 0, - "revokeRefreshToken": false, - "refreshTokenMaxReuse": 0, - "accessTokenLifespan": 300, - "accessTokenLifespanForImplicitFlow": 900, - "ssoSessionIdleTimeout": 1800, - "ssoSessionMaxLifespan": 36000, - "ssoSessionIdleTimeoutRememberMe": 0, - "ssoSessionMaxLifespanRememberMe": 0, - "offlineSessionIdleTimeout": 2592000, - "offlineSessionMaxLifespanEnabled": false, - "offlineSessionMaxLifespan": 5184000, - "accessCodeLifespan": 60, - "accessCodeLifespanUserAction": 300, - "accessCodeLifespanLogin": 1800, - "actionTokenGeneratedByAdminLifespan": 43200, - "actionTokenGeneratedByUserLifespan": 300, - "enabled": true, - "sslRequired": "external", - "registrationAllowed": false, - "registrationEmailAsUsername": false, - "rememberMe": false, - "verifyEmail": false, - "loginWithEmailAllowed": true, - "duplicateEmailsAllowed": false, - "resetPasswordAllowed": false, - "editUsernameAllowed": false, - "bruteForceProtected": false, - "permanentLockout": false, - "maxFailureWaitSeconds": 900, - "minimumQuickLoginWaitSeconds": 60, - "waitIncrementSeconds": 60, - "quickLoginCheckMilliSeconds": 1000, - "maxDeltaTimeSeconds": 43200, - "failureFactor": 30, - "roles": { - "realm": [ - { - "name": "managers", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "uma_authorization", - "description": "${role_uma_authorization}", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "admin", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "user", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "HR", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "IT", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "offline_access", - "description": "${role_offline-access}", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - } - ], - "client": { - "realm-management": [ - { - "name": "manage-identity-providers", - "description": "${role_manage-identity-providers}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "impersonation", - "description": "${role_impersonation}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-identity-providers", - "description": "${role_view-identity-providers}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-realm", - "description": "${role_view-realm}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-users", - "description": "${role_query-users}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-clients", - "description": "${role_manage-clients}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-events", - "description": "${role_manage-events}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "realm-admin", - "description": "${role_realm-admin}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "impersonation", - "manage-identity-providers", - "view-identity-providers", - "view-realm", - "query-users", - "manage-clients", - "manage-events", - "manage-realm", - "view-authorization", - "manage-authorization", - "view-users", - "create-client", - "query-clients", - "query-groups", - "manage-users", - "view-clients", - "view-events", - "query-realms" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-realm", - "description": "${role_manage-realm}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-authorization", - "description": "${role_view-authorization}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-authorization", - "description": "${role_manage-authorization}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "create-client", - "description": "${role_create-client}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-users", - "description": "${role_view-users}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "query-groups", - "query-users" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-clients", - "description": "${role_query-clients}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-groups", - "description": "${role_query-groups}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-users", - "description": "${role_manage-users}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-clients", - "description": "${role_view-clients}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "query-clients" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-events", - "description": "${role_view-events}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-realms", - "description": "${role_query-realms}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - } - ], - "security-admin-console": [], - "admin-cli": [], - "kogito-service": [ - { - "name": "uma_protection", - "composite": false, - "clientRole": true, - "containerId": "0ac5df91-e044-4051-bd03-106a3a5fb9cc", - "attributes": {} - } - ], - "broker": [ - { - "name": "read-token", - "description": "${role_read-token}", - "composite": false, - "clientRole": true, - "containerId": "53d4fe53-a039-471e-886a-28eddc950e95", - "attributes": {} - } - ], - "account": [ - { - "name": "view-profile", - "description": "${role_view-profile}", - "composite": false, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - }, - { - "name": "manage-account", - "description": "${role_manage-account}", - "composite": true, - "composites": { - "client": { - "account": [ - "manage-account-links" - ] - } - }, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - }, - { - "name": "manage-account-links", - "description": "${role_manage-account-links}", - "composite": false, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - } - ] - } - }, - "groups": [], - "defaultRoles": [ - "uma_authorization", - "offline_access" - ], - "requiredCredentials": [ - "password" - ], - "otpPolicyType": "totp", - "otpPolicyAlgorithm": "HmacSHA1", - "otpPolicyInitialCounter": 0, - "otpPolicyDigits": 6, - "otpPolicyLookAheadWindow": 1, - "otpPolicyPeriod": 30, - "otpSupportedApplications": [ - "FreeOTP", - "Google Authenticator" - ], - "scopeMappings": [ - { - "clientScope": "offline_access", - "roles": [ - "offline_access" - ] - } - ], - "clients": [ - { - "clientId": "account", - "name": "${client_account}", - "baseUrl": "/auth/realms/kogito/account", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "0136c3ef-0dfd-4b13-a6d0-2c8b6358edec", - "defaultRoles": [ - "view-profile", - "manage-account" - ], - "redirectUris": [ - "/auth/realms/kogito/account/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "admin-cli", - "name": "${client_admin-cli}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "a951803a-79c7-46a6-8197-e32835286971", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": false, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "broker", - "name": "${client_broker}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "e1f7edd7-e15c-43b4-8736-ff8204d16836", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-frontend", - "rootUrl": "http://localhost:8082", - "adminUrl": "http://localhost:8082", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8082/*" - ], - "webOrigins": [ - "http://localhost:8082" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "kogito-app", - "rootUrl": "http://localhost:8080", - "adminUrl": "http://localhost:8080", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8080/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "kogito-service", - "rootUrl": "", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": true, - "authorizationServicesEnabled": true, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "name": "Client ID", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientId", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientId", - "jsonType.label": "String" - } - }, - { - "name": "Client IP Address", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientAddress", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientAddress", - "jsonType.label": "String" - } - }, - { - "name": "Client Host", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientHost", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientHost", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "authorizationSettings": { - "allowRemoteResourceManagement": true, - "policyEnforcementMode": "ENFORCING", - "resources": [ - { - "name": "User Resource", - "ownerManagedAccess": false, - "attributes": {}, - "_id": "df1b74a9-3f10-499d-a581-368de48e512b", - "uris": [ - "/api/users/*" - ] - }, - { - "name": "Administration Resource", - "ownerManagedAccess": false, - "attributes": {}, - "_id": "7124e2f1-e6dc-44b4-87ab-24b010090b97", - "uris": [ - "/api/admin/*" - ] - } - ], - "policies": [ - { - "name": "Any User Policy", - "description": "Any user granted with the user role can access something", - "type": "role", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "roles": "[{\"id\":\"user\",\"required\":false}]" - } - }, - { - "name": "Only Administrators", - "description": "Only administrators can access", - "type": "role", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "roles": "[{\"id\":\"admin\",\"required\":false}]" - } - }, - { - "name": "User Resource Permission", - "type": "resource", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "resources": "[\"User Resource\"]", - "applyPolicies": "[\"Any User Policy\"]" - } - }, - { - "name": "Administration Resource Permission", - "type": "resource", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "resources": "[\"Administration Resource\"]", - "applyPolicies": "[\"Only Administrators\"]" - } - } - ], - "scopes": [], - "decisionStrategy": "UNANIMOUS" - } - }, - { - "clientId": "kogito-console-react", - "rootUrl": "http://localhost:9000", - "adminUrl": "http://localhost:9000/", - "baseUrl": "http://localhost:9000/", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "http://localhost:9000/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-console-quarkus", - "rootUrl": "http://localhost:8380", - "adminUrl": "http://localhost:8380/", - "baseUrl": "http://localhost:8380/", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "http://localhost:8380/*", - "http://localhost:8280/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "name": "groups", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "user.attribute": "foo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "groups", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-jobs-service", - "rootUrl": "http://localhost:8080", - "adminUrl": "http://localhost:8080", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8080/*" - ], - "webOrigins": [ - "http://localhost:8080" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "realm-management", - "name": "${client_realm-management}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "c41b709a-a012-4c69-89d7-4f926dba0619", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": true, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "security-admin-console", - "name": "${client_security-admin-console}", - "baseUrl": "/auth/admin/kogito/console/index.html", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "e571b211-2550-475d-b87f-116ff54091ee", - "redirectUris": [ - "/auth/admin/kogito/console/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "protocolMappers": [ - { - "name": "locale", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "locale", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "locale", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - } - ], - "clientScopes": [ - { - "name": "address", - "description": "OpenID Connect built-in scope: address", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${addressScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "address", - "protocol": "openid-connect", - "protocolMapper": "oidc-address-mapper", - "consentRequired": false, - "config": { - "user.attribute.formatted": "formatted", - "user.attribute.country": "country", - "user.attribute.postal_code": "postal_code", - "userinfo.token.claim": "true", - "user.attribute.street": "street", - "id.token.claim": "true", - "user.attribute.region": "region", - "access.token.claim": "true", - "user.attribute.locality": "locality" - } - } - ] - }, - { - "name": "email", - "description": "OpenID Connect built-in scope: email", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${emailScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "email", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "email", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "email", - "jsonType.label": "String" - } - }, - { - "name": "email verified", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "emailVerified", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "email_verified", - "jsonType.label": "boolean" - } - } - ] - }, - { - "name": "microprofile-jwt", - "description": "Microprofile - JWT built-in scope", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "false" - }, - "protocolMappers": [ - { - "name": "upn", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "username", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "upn", - "jsonType.label": "String" - } - }, - { - "name": "groups", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "user.attribute": "foo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "groups", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "offline_access", - "description": "OpenID Connect built-in scope: offline_access", - "protocol": "openid-connect", - "attributes": { - "consent.screen.text": "${offlineAccessScopeConsentText}", - "display.on.consent.screen": "true" - } - }, - { - "name": "phone", - "description": "OpenID Connect built-in scope: phone", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${phoneScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "phone number verified", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "phoneNumberVerified", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "phone_number_verified", - "jsonType.label": "boolean" - } - }, - { - "name": "phone number", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "phoneNumber", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "phone_number", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "profile", - "description": "OpenID Connect built-in scope: profile", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${profileScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "nickname", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "nickname", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "nickname", - "jsonType.label": "String" - } - }, - { - "name": "zoneinfo", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "zoneinfo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "zoneinfo", - "jsonType.label": "String" - } - }, - { - "name": "updated at", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "updatedAt", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "updated_at", - "jsonType.label": "String" - } - }, - { - "name": "birthdate", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "birthdate", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "birthdate", - "jsonType.label": "String" - } - }, - { - "name": "given name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "firstName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "given_name", - "jsonType.label": "String" - } - }, - { - "name": "full name", - "protocol": "openid-connect", - "protocolMapper": "oidc-full-name-mapper", - "consentRequired": false, - "config": { - "id.token.claim": "true", - "access.token.claim": "true", - "userinfo.token.claim": "true" - } - }, - { - "name": "middle name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "middleName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "middle_name", - "jsonType.label": "String" - } - }, - { - "name": "username", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "username", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "preferred_username", - "jsonType.label": "String" - } - }, - { - "name": "family name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "lastName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "family_name", - "jsonType.label": "String" - } - }, - { - "name": "gender", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "gender", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "gender", - "jsonType.label": "String" - } - }, - { - "name": "picture", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "picture", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "picture", - "jsonType.label": "String" - } - }, - { - "name": "locale", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "locale", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "locale", - "jsonType.label": "String" - } - }, - { - "name": "profile", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "profile", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "profile", - "jsonType.label": "String" - } - }, - { - "name": "website", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "website", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "website", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "role_list", - "description": "SAML role list", - "protocol": "saml", - "attributes": { - "consent.screen.text": "${samlRoleListScopeConsentText}", - "display.on.consent.screen": "true" - }, - "protocolMappers": [ - { - "name": "role list", - "protocol": "saml", - "protocolMapper": "saml-role-list-mapper", - "consentRequired": false, - "config": { - "single": "false", - "attribute.nameformat": "Basic", - "attribute.name": "Role" - } - } - ] - }, - { - "name": "roles", - "description": "OpenID Connect scope for add user roles to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "false", - "display.on.consent.screen": "true", - "consent.screen.text": "${rolesScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "realm roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "realm_access.roles", - "jsonType.label": "String", - "multivalued": "true" - } - }, - { - "name": "audience resolve", - "protocol": "openid-connect", - "protocolMapper": "oidc-audience-resolve-mapper", - "consentRequired": false, - "config": {} - }, - { - "name": "client roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-client-role-mapper", - "consentRequired": false, - "config": { - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "resource_access.${client_id}.roles", - "jsonType.label": "String", - "multivalued": "true" - } - } - ] - }, - { - "name": "web-origins", - "description": "OpenID Connect scope for add allowed web origins to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "false", - "display.on.consent.screen": "false", - "consent.screen.text": "" - }, - "protocolMappers": [ - { - "name": "allowed web origins", - "protocol": "openid-connect", - "protocolMapper": "oidc-allowed-origins-mapper", - "consentRequired": false, - "config": {} - } - ] - } - ], - "defaultDefaultClientScopes": [ - "role_list", - "profile", - "email", - "roles", - "web-origins" - ], - "defaultOptionalClientScopes": [ - "offline_access", - "address", - "phone", - "microprofile-jwt" - ], - "browserSecurityHeaders": { - "contentSecurityPolicyReportOnly": "", - "xContentTypeOptions": "nosniff", - "xRobotsTag": "none", - "xFrameOptions": "SAMEORIGIN", - "xXSSProtection": "1; mode=block", - "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", - "strictTransportSecurity": "max-age=31536000; includeSubDomains" - }, - "smtpServer": {}, - "eventsEnabled": false, - "eventsListeners": [ - "jboss-logging" - ], - "enabledEventTypes": [], - "adminEventsEnabled": false, - "adminEventsDetailsEnabled": false, - "components": { - "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ - { - "name": "Allowed Protocol Mapper Types", - "providerId": "allowed-protocol-mappers", - "subType": "anonymous", - "subComponents": {}, - "config": { - "allowed-protocol-mapper-types": [ - "oidc-full-name-mapper", - "saml-user-attribute-mapper", - "saml-user-property-mapper", - "oidc-address-mapper", - "saml-role-list-mapper", - "oidc-sha256-pairwise-sub-mapper", - "oidc-usermodel-attribute-mapper", - "oidc-usermodel-property-mapper" - ] - } - }, - { - "name": "Allowed Client Scopes", - "providerId": "allowed-client-templates", - "subType": "authenticated", - "subComponents": {}, - "config": { - "allow-default-scopes": [ - "true" - ] - } - }, - { - "name": "Allowed Client Scopes", - "providerId": "allowed-client-templates", - "subType": "anonymous", - "subComponents": {}, - "config": { - "allow-default-scopes": [ - "true" - ] - } - }, - { - "name": "Trusted Hosts", - "providerId": "trusted-hosts", - "subType": "anonymous", - "subComponents": {}, - "config": { - "host-sending-registration-request-must-match": [ - "true" - ], - "client-uris-must-match": [ - "true" - ] - } - }, - { - "name": "Full Scope Disabled", - "providerId": "scope", - "subType": "anonymous", - "subComponents": {}, - "config": {} - }, - { - "name": "Max Clients Limit", - "providerId": "max-clients", - "subType": "anonymous", - "subComponents": {}, - "config": { - "max-clients": [ - "200" - ] - } - }, - { - "name": "Consent Required", - "providerId": "consent-required", - "subType": "anonymous", - "subComponents": {}, - "config": {} - }, - { - "name": "Allowed Protocol Mapper Types", - "providerId": "allowed-protocol-mappers", - "subType": "authenticated", - "subComponents": {}, - "config": { - "allowed-protocol-mapper-types": [ - "saml-user-attribute-mapper", - "oidc-full-name-mapper", - "saml-role-list-mapper", - "saml-user-property-mapper", - "oidc-usermodel-attribute-mapper", - "oidc-address-mapper", - "oidc-usermodel-property-mapper", - "oidc-sha256-pairwise-sub-mapper" - ] - } - } - ], - "org.keycloak.keys.KeyProvider": [ - { - "name": "rsa-generated", - "providerId": "rsa-generated", - "subComponents": {}, - "config": { - "privateKey": [ - "MIIEowIBAAKCAQEAn5T13suF8mlS+pJXp0U1bto41nW55wpcs+Rps8ZVCRyJKWqzwSCYnI7lm0rB2wBpAAO4OPoj1zlmVoFmBPsDU9Xf7rjsJb5LIzIQDCZY44aSDZt6RR+gakPiQvlzHyW/RozYpngDJF7TsTD7rdRF1xQ4RprfBF8fwK/xsU7pxbeom5xDHZhz3fiw8s+7UdbmnazDHfAjU58aUrLGgVRfUsuoHjtsptYlOIXEifaeMetXZE+HhqLYRHQPDap5fbBJl773Trosn7N9nmzN4x1xxGj9So21WC5UboQs9sAIVgizc4omjZ5Y4RN9HLH7G4YwJctNntzmnJhDui9zAO+zSQIDAQABAoIBADi+F7rTtVoft0Cfnok8o6Y58/HVxHdxiMryUd95iy0FN4RBi48FTx6D9QKFz25Ws/8sU2n3D51srIXf1u24b1N0/f39RQKaqk7mcyxOylaEuBQcj5pah4ihgKd92UBfBKdKV5LBo6RgD3e2yhbiHr8+UlBQqzH7vOef6Bm6zIbfmi3N88swAJhP0YizRZFklsbmLsK6nkwyro00CHJvPVKSBbM+ad+/zIBsLw56MvNngB5TuFguUgoljd6M1T2z4utmZGlTUqrfE1onAVLJZoGnRohyIr7dJEg6YxWR70PxsgmkDKyeRvet9P1trO0n+OSprusfrC3cHJStabap1V0CgYEA1A/CtsqTnjdYYsB19eumZgdpzUgNc/YEAzZ/OWb8yTLoB2ncci+63A1rXHUXAqJFY7vtjn5mxv7SuASNbUrzq+6KfZvC1x9XEtnczqT/ypunNfxmIZuj8Nuu6vtURguZ8kPPwdkI8toTizRFeRE5ZDBvoQryiEVYugfHaHT5vzsCgYEAwKWODwquI0Lv9BuwdNVrBXQpkKh3ZfYOA7i9xvhxlM7xUu8OMCwwCPn3r7vrW5APjTqX4h330mJ44SLEs+7gbCUs4BbJBLA6g0ChlHa9PTkxp6tk2nDF/B34fxiZSRkE85L+d+at0Dc3hnlzLCJCzJawGpoPniPU9e4w0p4dN0sCgYAsGnMGjS8SUrRhJWHjGXVr9tK8TOXvXhULjgP7rj2Yoqu7Dvs4DFEyft/7RKbad2EzEtyfLA64CDtO5jN7rYDsGxpWcVSeZPg5BXJ0z8AbJTArfCjJiJMZ/rZsTIUEZFlKF2xYBolj6JLz+pUQTtK+0YwF1D8ItFN1rTR9twZSDQKBgQC6sPXNX+VH6LuPTjIf1x8CxwLs3EXxOpV0R9kp9GRl+HJnk6GlT30xhcThufQo5KAdllXQXIhoiuNoEoCbevhj9Vbax1oBQCNERSMRNEzKAx46xd9TzYwgeo7x5E3QR/3DaoVOfu+cY5ZcrF/PulgP2kxJS1mtQD5GIpGP2oinpwKBgGqiqTFPqRcelx76vBvTU+Jp1zM62T4AotbMrSQR/oUvqHe5Ytj/SbZx+wbbHAiyGgV700Mosyviik83YEAbR3kdOPjgYvAJJW2Y3jEMdQ7MwriXz8XLh5BGmYfVjkSOJXed9ua9WlYLKOJeXXv191BbDvrx5NXuJyVVU4vJx3YZ" - ], - "certificate": [ - "MIICnTCCAYUCBgFp4EYIrjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdwcm90ZWFuMB4XDTE5MDQwMjIyNTYxOVoXDTI5MDQwMjIyNTc1OVowEjEQMA4GA1UEAwwHcHJvdGVhbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+U9d7LhfJpUvqSV6dFNW7aONZ1uecKXLPkabPGVQkciSlqs8EgmJyO5ZtKwdsAaQADuDj6I9c5ZlaBZgT7A1PV3+647CW+SyMyEAwmWOOGkg2bekUfoGpD4kL5cx8lv0aM2KZ4AyRe07Ew+63URdcUOEaa3wRfH8Cv8bFO6cW3qJucQx2Yc934sPLPu1HW5p2swx3wI1OfGlKyxoFUX1LLqB47bKbWJTiFxIn2njHrV2RPh4ai2ER0Dw2qeX2wSZe+9066LJ+zfZ5szeMdccRo/UqNtVguVG6ELPbACFYIs3OKJo2eWOETfRyx+xuGMCXLTZ7c5pyYQ7ovcwDvs0kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAVtmRKDb4OK5iSA46tagMBkp6L7WuPpCWuHGWwobEP+BecYsShW7zP3s12oA8SNSwbhvu0CRqgzxhuypgf3hKQFVU153Erv4hzkj+8S0s5LR/ZE7tDNY2lzJ3yQKXy3Md7EkuzzvOZ50MTrcSKAanWq/ZW1OTnrtGymj5zGJnTg7mMnJzEIGePxkvPu/QdchiPBLqxfZYm1jsFGY25djOC3N/KmVcRVmPRGuu6D8tBFHlKoPfZYPdbMvsvs24aupHKRcZ+ofTCpK+2Qo8c0pSSqeEYHGmuGqC6lC6ozxtxSABPO9Q1R1tZBU7Kg5HvXUwwmoVS3EGub46YbHqbmWMLg==" - ], - "priority": [ - "100" - ] - } - }, - { - "name": "hmac-generated", - "providerId": "hmac-generated", - "subComponents": {}, - "config": { - "kid": [ - "96afd00e-85cf-4d35-b18e-061d3813d8b2" - ], - "secret": [ - "qBFGKdUGf6xDgKphnRfoFzIzaFHJW4bYnZ9MinPFzN38X5_ctq-2u1q5RdZzeJukXvk2biHB8_s3DxWmmLZFsA" - ], - "priority": [ - "100" - ], - "algorithm": [ - "HS256" - ] - } - }, - { - "name": "aes-generated", - "providerId": "aes-generated", - "subComponents": {}, - "config": { - "kid": [ - "b04473d3-8395-4016-b455-19a9e951106b" - ], - "secret": [ - "x68mMOVdz3qKWzltzReV0g" - ], - "priority": [ - "100" - ] - } - } - ] - }, - "internationalizationEnabled": false, - "supportedLocales": [], - "authenticationFlows": [ - { - "alias": "Handle Existing Account", - "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-confirm-link", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "idp-email-verification", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "Verify Existing Account by Re-authentication", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "Verify Existing Account by Re-authentication", - "description": "Reauthentication of existing account", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-username-password-form", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-otp-form", - "requirement": "OPTIONAL", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "browser", - "description": "browser based authentication", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "auth-cookie", - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-spnego", - "requirement": "DISABLED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "identity-provider-redirector", - "requirement": "ALTERNATIVE", - "priority": 25, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "forms", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "clients", - "description": "Base authentication for clients", - "providerId": "client-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "client-secret", - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-jwt", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-secret-jwt", - "requirement": "ALTERNATIVE", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-x509", - "requirement": "ALTERNATIVE", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "direct grant", - "description": "OpenID Connect Resource Owner Grant", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "direct-grant-validate-username", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "direct-grant-validate-password", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "direct-grant-validate-otp", - "requirement": "OPTIONAL", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "docker auth", - "description": "Used by Docker clients to authenticate against the IDP", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "docker-http-basic-authenticator", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "first broker login", - "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticatorConfig": "review profile config", - "authenticator": "idp-review-profile", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorConfig": "create unique user config", - "authenticator": "idp-create-user-if-unique", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "Handle Existing Account", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "forms", - "description": "Username, password, otp and other auth forms.", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "auth-username-password-form", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-otp-form", - "requirement": "OPTIONAL", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "http challenge", - "description": "An authentication flow based on challenge-response HTTP Authentication Schemes", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "no-cookie-redirect", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "basic-auth", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "basic-auth-otp", - "requirement": "DISABLED", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-spnego", - "requirement": "DISABLED", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "registration", - "description": "registration flow", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "registration-page-form", - "requirement": "REQUIRED", - "priority": 10, - "flowAlias": "registration form", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "registration form", - "description": "registration form", - "providerId": "form-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "registration-user-creation", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-profile-action", - "requirement": "REQUIRED", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-password-action", - "requirement": "REQUIRED", - "priority": 50, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-recaptcha-action", - "requirement": "DISABLED", - "priority": 60, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "reset credentials", - "description": "Reset credentials for a user if they forgot their password or something", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "reset-credentials-choose-user", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-credential-email", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-password", - "requirement": "REQUIRED", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-otp", - "requirement": "OPTIONAL", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "saml ecp", - "description": "SAML ECP Profile Authentication Flow", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "http-basic-authenticator", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - } - ], - "authenticatorConfig": [ - { - "alias": "create unique user config", - "config": { - "require.password.update.after.registration": "false" - } - }, - { - "alias": "review profile config", - "config": { - "update.profile.on.first.login": "missing" - } - } - ], - "requiredActions": [ - { - "alias": "CONFIGURE_TOTP", - "name": "Configure OTP", - "providerId": "CONFIGURE_TOTP", - "enabled": true, - "defaultAction": false, - "priority": 10, - "config": {} - }, - { - "alias": "terms_and_conditions", - "name": "Terms and Conditions", - "providerId": "terms_and_conditions", - "enabled": false, - "defaultAction": false, - "priority": 20, - "config": {} - }, - { - "alias": "UPDATE_PASSWORD", - "name": "Update Password", - "providerId": "UPDATE_PASSWORD", - "enabled": true, - "defaultAction": false, - "priority": 30, - "config": {} - }, - { - "alias": "UPDATE_PROFILE", - "name": "Update Profile", - "providerId": "UPDATE_PROFILE", - "enabled": true, - "defaultAction": false, - "priority": 40, - "config": {} - }, - { - "alias": "VERIFY_EMAIL", - "name": "Verify Email", - "providerId": "VERIFY_EMAIL", - "enabled": true, - "defaultAction": false, - "priority": 50, - "config": {} - } - ], - "browserFlow": "browser", - "registrationFlow": "registration", - "directGrantFlow": "direct grant", - "resetCredentialsFlow": "reset credentials", - "clientAuthenticationFlow": "clients", - "dockerAuthenticationFlow": "docker auth", - "attributes": { - "_browser_header.xXSSProtection": "1; mode=block", - "_browser_header.xFrameOptions": "SAMEORIGIN", - "_browser_header.strictTransportSecurity": "max-age=31536000; includeSubDomains", - "permanentLockout": "false", - "quickLoginCheckMilliSeconds": "1000", - "_browser_header.xRobotsTag": "none", - "maxFailureWaitSeconds": "900", - "minimumQuickLoginWaitSeconds": "60", - "failureFactor": "30", - "actionTokenGeneratedByUserLifespan": "300", - "maxDeltaTimeSeconds": "43200", - "_browser_header.xContentTypeOptions": "nosniff", - "offlineSessionMaxLifespan": "5184000", - "actionTokenGeneratedByAdminLifespan": "43200", - "_browser_header.contentSecurityPolicyReportOnly": "", - "bruteForceProtected": "false", - "_browser_header.contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", - "waitIncrementSeconds": "60", - "offlineSessionMaxLifespanEnabled": "false" - }, - "users": [ - { - "username": "admin", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "NICTtwsvSxJ5hL8hLAuleDUv9jwZcuXgxviMXvR++cciyPtiIEStEaJUyfA9DOir59awjPrHOumsclPVjNBplA==", - "salt": "T/2P5o5oxFJUEk68BRURRg==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879354, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "admin", - "managers", - "user", - "IT", - "HR" - ], - "notBefore": 0, - "groups": [] - }, - { - "username": "alice", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "A3okqV2T/ybXTVEgKfosoSjP8Yc9IZbFP/SY4cEd6hag7TABQrQ6nUSuwagGt96l8cw1DTijO75PqX6uiTXMzw==", - "salt": "sl4mXx6T9FypPH/s9TngfQ==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879116, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "user", - "HR" - ], - "notBefore": 0, - "groups": [] - }, - { - "username": "jdoe", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "JV3DUNLjqOadjbBOtC4rvacQI553CGaDGAzBS8MR5ReCr7SwF3E6CsW3T7/XO8ITZAsch8+A/6loeuCoVLLJrg==", - "salt": "uCbOH7HZtyDtMd0E9DG/nw==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879227, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "managers", - "user", - "IT" - ], - "notBefore": 0, - "groups": [] - } - ], - "keycloakVersion": "6.0.0", - "userManagedAccessAllowed": false -} diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/startServices.sh b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/startServices.sh deleted file mode 100755 index ffba606ddf..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docker-compose/startServices.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/sh -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - - -echo "Script requires your Kogito Quickstart to be compiled with mvn clean install -Pcontainer" - -PROJECT_VERSION=$(cd ../ && mvn help:evaluate -Dexpression=project.version -q -DforceStdout) - -echo "Project version: ${PROJECT_VERSION}" - -if [[ $PROJECT_VERSION == *SNAPSHOT ]]; -then - KOGITO_VERSION="latest" -else - KOGITO_VERSION=${PROJECT_VERSION%.*} -fi - -echo "Kogito Image version: ${KOGITO_VERSION}" -echo "KOGITO_VERSION=${KOGITO_VERSION}" > ".env" - -if [ "$(uname)" == "Darwin" ]; then - echo "DOCKER_GATEWAY_HOST=kubernetes.docker.internal" >> ".env" -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - echo "DOCKER_GATEWAY_HOST=172.17.0.1" >> ".env" -fi - -PERSISTENCE_FOLDER=./persistence -KOGITO_EXAMPLE_PERSISTENCE=../target/classes/META-INF/resources/persistence/protobuf - -rm -rf $PERSISTENCE_FOLDER - -mkdir -p $PERSISTENCE_FOLDER - -if [ -d "$KOGITO_EXAMPLE_PERSISTENCE" ] -then - cp $KOGITO_EXAMPLE_PERSISTENCE/*.proto $PERSISTENCE_FOLDER/ -else - echo "$KOGITO_EXAMPLE_PERSISTENCE does not exist. Have you compiled the project?" - exit 1 -fi - -SVG_FOLDER=./svg - -KOGITO_EXAMPLE_SVG_FOLDER=../target/classes/META-INF/processSVG - -mkdir -p $SVG_FOLDER - -if [ -d "$KOGITO_EXAMPLE_SVG_FOLDER" ] -then - cp $KOGITO_EXAMPLE_SVG_FOLDER/*.svg $SVG_FOLDER -else - echo "$KOGITO_EXAMPLE_SVG_FOLDER does not exist. Have you compiled the project?" - exit 1 -fi - -docker-compose up \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_details1.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_details1.png deleted file mode 100644 index 5f0a95379c..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_details1.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_details2.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_details2.png deleted file mode 100644 index 7ddf2fb204..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_details2.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_details3.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_details3.png deleted file mode 100644 index fcc6ba57fb..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_details3.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_list1.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_list1.png deleted file mode 100644 index 1caeae2ef2..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_list1.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_list2.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_list2.png deleted file mode 100644 index a4c3acce85..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/MC_list2.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_FirstLine.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_FirstLine.png deleted file mode 100644 index e0f0f74e56..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_FirstLine.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_SecondLine.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_SecondLine.png deleted file mode 100644 index 64edc107ac..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_SecondLine.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_list1.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_list1.png deleted file mode 100644 index 0cc967bd1d..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_list1.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_list2.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_list2.png deleted file mode 100644 index deabbc048e..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/TC_list2.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/keycloak-login.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/keycloak-login.png deleted file mode 100644 index 58d85f1f43..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/keycloak-login.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/management-console.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/management-console.png deleted file mode 100644 index 9a6053e529..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/management-console.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/process.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/process.png deleted file mode 100644 index 974dfaebaf..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/process.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/services.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/services.png deleted file mode 100644 index 64dd2464b7..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/services.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/task-console.png b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/task-console.png deleted file mode 100644 index 08688fe01e..0000000000 Binary files a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/docs/images/task-console.png and /dev/null differ diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/java/org/acme/travels/Address.java b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/java/org/acme/travels/Address.java deleted file mode 100644 index 662dfa9b9f..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/java/org/acme/travels/Address.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -public class Address { - - private String street; - private String city; - private String zipCode; - private String country; - - public Address() { - - } - - public Address(String street, String city, String zipCode, String country) { - super(); - this.street = street; - this.city = city; - this.zipCode = zipCode; - this.country = country; - } - - public String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getZipCode() { - return zipCode; - } - - public void setZipCode(String zipCode) { - this.zipCode = zipCode; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - @Override - public String toString() { - return "Address [street=" + street + ", city=" + city + ", zipCode=" + zipCode + ", country=" + country + "]"; - } -} diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/java/org/acme/travels/Traveller.java b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/java/org/acme/travels/Traveller.java deleted file mode 100644 index c24685803d..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/java/org/acme/travels/Traveller.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -public class Traveller { - - private String firstName; - private String lastName; - private String email; - private String nationality; - private Address address; - - public Traveller() { - - } - - public Traveller(String firstName, String lastName, String email, String nationality, Address address) { - super(); - this.firstName = firstName; - this.lastName = lastName; - this.email = email; - this.nationality = nationality; - this.address = address; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getNationality() { - return nationality; - } - - public void setNationality(String nationality) { - this.nationality = nationality; - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - - @Override - public String toString() { - return "Traveller [firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + ", nationality=" - + nationality + ", address=" + address + "]"; - } - -} diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/META-INF/processSVG/approvals.svg b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/META-INF/processSVG/approvals.svg deleted file mode 100644 index 3d8a564a94..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/META-INF/processSVG/approvals.svg +++ /dev/null @@ -1 +0,0 @@ -StartProcessFirst Line approvalSecond Line approvalEnd \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/META-INF/resources/index.html b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/META-INF/resources/index.html deleted file mode 100644 index c9d1ca0c76..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/META-INF/resources/index.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - Kogito quickstart - - - - - - - - - - - - - - -
-
-
-
-

Welcome to Kogito

-

- Cloud-native business automation for building intelligent applications, backed by - battle-tested capabilities. -

- - Get Started - - - Latest updates - -
-
-
-
-
-
-
-

Quick Links

- -
-
-
- - - \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/application.properties b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/application.properties deleted file mode 100644 index 24259d03c1..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/application.properties +++ /dev/null @@ -1,79 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# Packaging -#quarkus.package.type=fast-jar - -#https://quarkus.io/guides/openapi-swaggerui -quarkus.http.cors=true -quarkus.smallrye-openapi.path=/docs/openapi.json -quarkus.swagger-ui.always-include=true - -kogito.service.url=http://localhost:8080 -kogito.dataindex.http.url=http://localhost:8180 -kogito.dataindex.ws.url=ws://localhost:8180 - -quarkus.infinispan-client.hosts=localhost:11222 -quarkus.infinispan-client.use-auth=false - -kafka.bootstrap.servers=localhost:9092 - -## main transport - -## metadata - -#mp.messaging.outgoing.kogito-processinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-processinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-processinstances-events.topic=kogito-processinstances-events -mp.messaging.outgoing.kogito-processinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-usertaskinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-usertaskinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-usertaskinstances-events.topic=kogito-usertaskinstances-events -mp.messaging.outgoing.kogito-usertaskinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-variables-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-variables-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-variables-events.topic=kogito-variables-events -mp.messaging.outgoing.kogito-variables-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -mp.messaging.outgoing.kogito-processdefinitions-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-processdefinitions-events.topic=kogito-processdefinitions-events -mp.messaging.outgoing.kogito-processdefinitions-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -# security -quarkus.oidc.auth-server-url=http://localhost:8480/auth/realms/kogito - -quarkus.oidc.client-id=kogito-app -quarkus.oidc.credentials.secret=secret - -quarkus.http.auth.permission.authenticated.paths=/* -quarkus.http.auth.permission.authenticated.policy=authenticated - -quarkus.http.cors.origins=http://localhost:${quarkus.http.port} - -# profile to pack this example into a container, to use it execute activate the maven container profile, -Dcontainer -%container.quarkus.container-image.build=true -%container.quarkus.container-image.push=false -%container.quarkus.container-image.group=${USER} -%container.quarkus.container-image.registry=dev.local -%container.quarkus.container-image.tag=1.0-SNAPSHOT -%container.quarkus.jib.jvm-entrypoint=/home/kogito/kogito-app-launch.sh -%container.quarkus.jib.base-jvm-image=quay.io/kiegroup/kogito-runtime-jvm:latest -%container.quarkus.jib.working-directory=/home/kogito/bin \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/org/acme/travels/approval.bpmn2 b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/org/acme/travels/approval.bpmn2 deleted file mode 100644 index a687f98a3e..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/main/resources/org/acme/travels/approval.bpmn2 +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SequenceFlow_4 - - - - - - - - SequenceFlow_6 - - - - - - - - SequenceFlow_4 - SequenceFlow_5 - - - - - - - - - - UserTask_1_TaskNameInputX - UserTask_1_travellerInputX - UserTask_1_SkippableInputX - UserTask_1_GroupIdInputX - UserTask_1_PriorityInputX - - - UserTask_1_ActorIdOutputX - UserTask_1_approvedOutputX - - - - UserTask_1_TaskNameInputX - - - - - - - traveller - UserTask_1_travellerInputX - - - UserTask_1_SkippableInputX - - - - - - - UserTask_1_GroupIdInputX - - - - - - - UserTask_1_PriorityInputX - - - - - - - UserTask_1_ActorIdOutputX - approver - - - UserTask_1_approvedOutputX - firstLineApproval - - - - jdoe - - - - - - - - - - SequenceFlow_5 - SequenceFlow_6 - - - - - - - - - - UserTask_2_TaskNameInputX - UserTask_2_ExcludedOwnerIdInputX - UserTask_2_travellerInputX - UserTask_2_SkippableInputX - UserTask_2_GroupIdInputX - UserTask_2_PriorityInputX - - - UserTask_2_approvedOutputX - - - - UserTask_2_TaskNameInputX - - - - - - - approver - UserTask_2_ExcludedOwnerIdInputX - - - traveller - UserTask_2_travellerInputX - - - UserTask_2_SkippableInputX - - - - - - - UserTask_2_GroupIdInputX - - - - - - - UserTask_2_PriorityInputX - - - - - - - UserTask_2_approvedOutputX - secondLineApproval - - - - jdoe - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _WEN1QMLBEDmKX8ubtsKfug - _WEN1QMLBEDmKX8ubtsKfug - - \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/java/org/acme/travels/ApprovalsProcessIT.java b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/java/org/acme/travels/ApprovalsProcessIT.java deleted file mode 100644 index 904809c1a0..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/java/org/acme/travels/ApprovalsProcessIT.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.jbpm.process.instance.impl.humantask.HumanTaskTransition; -import org.jbpm.process.instance.impl.humantask.phases.Claim; -import org.jbpm.process.instance.impl.workitem.Complete; -import org.junit.jupiter.api.Test; -import org.kie.kogito.Model; -import org.kie.kogito.auth.IdentityProviders; -import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.process.Process; -import org.kie.kogito.process.ProcessInstance; -import org.kie.kogito.process.WorkItem; -import org.kie.kogito.testcontainers.quarkus.InfinispanQuarkusTestResource; -import org.kie.kogito.testcontainers.quarkus.KafkaQuarkusTestResource; -import org.kie.kogito.testcontainers.quarkus.KeycloakQuarkusTestResource; - -import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.QuarkusTest; - -import jakarta.inject.Inject; -import jakarta.inject.Named; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@QuarkusTest -@QuarkusTestResource(KeycloakQuarkusTestResource.class) -@QuarkusTestResource(value = InfinispanQuarkusTestResource.class) -@QuarkusTestResource(value = KafkaQuarkusTestResource.class) -public class ApprovalsProcessIT { - - @Named("approvals") - @Inject - Process approvalsProcess; - - @Test - public void testApprovalProcess() { - - assertNotNull(approvalsProcess); - - Model m = approvalsProcess.createModel(); - Map parameters = new HashMap<>(); - parameters.put("traveller", new Traveller("John", "Doe", "john.doe@example.com", "American", new Address("main street", "Boston", "10005", "US"))); - m.fromMap(parameters); - - ProcessInstance processInstance = approvalsProcess.createInstance(m); - processInstance.start(); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Arrays.asList("managers"))); - - processInstance.workItems(policy); - - List workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - Map results = new HashMap<>(); - results.put("approved", true); - processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - - workItems = processInstance.workItems(policy); - assertEquals(0, workItems.size()); - - policy = SecurityPolicy.of(IdentityProviders.of("john", Arrays.asList("managers"))); - - processInstance.workItems(policy); - - workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - - results.put("approved", false); - processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); - - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); - } - - @Test - public void testApprovalProcessViaPhases() { - - assertNotNull(approvalsProcess); - - Model m = approvalsProcess.createModel(); - Map parameters = new HashMap<>(); - parameters.put("traveller", new Traveller("John", "Doe", "john.doe@example.com", "American", new Address("main street", "Boston", "10005", "US"))); - m.fromMap(parameters); - - ProcessInstance processInstance = approvalsProcess.createInstance(m); - processInstance.start(); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Arrays.asList("managers"))); - - processInstance.workItems(policy); - - List workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Claim.ID, null, policy)); - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Complete.ID, Collections.singletonMap("approved", true), policy)); - - workItems = processInstance.workItems(policy); - assertEquals(0, workItems.size()); - - policy = SecurityPolicy.of(IdentityProviders.of("john", Arrays.asList("managers"))); - - processInstance.workItems(policy); - - workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Claim.ID, null, policy)); - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Complete.ID, Collections.singletonMap("approved", false), policy)); - - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); - - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); - } -} diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/java/org/acme/travels/ApprovalsRestIT.java b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/java/org/acme/travels/ApprovalsRestIT.java deleted file mode 100644 index 89e7dac360..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/java/org/acme/travels/ApprovalsRestIT.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -import org.junit.jupiter.api.Test; -import org.keycloak.representations.AccessTokenResponse; -import org.kie.kogito.test.quarkus.QuarkusTestProperty; -import org.kie.kogito.testcontainers.quarkus.KafkaQuarkusTestResource; -import org.kie.kogito.testcontainers.quarkus.KeycloakQuarkusTestResource; - -import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.QuarkusTest; -import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; - -@QuarkusTest -@QuarkusTestResource(KeycloakQuarkusTestResource.class) -@QuarkusTestResource(KafkaQuarkusTestResource.class) -public class ApprovalsRestIT { - - @QuarkusTestProperty(name = "quarkus.oidc.auth-server-url") - private String keycloakUrl; - - @Test - public void testStartApprovalUnauthorized() { - - given() - .body("{\"traveller\" : {\"firstName\" : \"John\",\"lastName\" : \"Doe\",\"email\" : \"john.doe@example.com\",\"nationality\" : \"American\",\"address\" : {\"street\" : \"main street\",\"city\" : \"Boston\",\"zipCode\" : \"10005\",\"country\" : \"US\"}}}") - .contentType(ContentType.JSON) - .when() - .post("/approvals") - .then() - .statusCode(401); - } - - @SuppressWarnings("rawtypes") - @Test - public void testStartApprovalAuthorized() { - - // start new approval - String id = given() - .auth().oauth2(getAccessToken("mary")) - .body("{\"traveller\" : {\"firstName\" : \"John\",\"lastName\" : \"Doe\",\"email\" : \"john.doe@example.com\",\"nationality\" : \"American\",\"address\" : {\"street\" : \"main street\",\"city\" : \"Boston\",\"zipCode\" : \"10005\",\"country\" : \"US\"}}}") - .contentType(ContentType.JSON) - .when() - .post("/approvals") - .then() - .statusCode(201) - .body("id", notNullValue()).extract().path("id"); - // get all active approvals - given() - .auth().oauth2(getAccessToken("mary")) - .accept(ContentType.JSON) - .when() - .get("/approvals") - .then() - .statusCode(200) - .body("size()", is(1), "[0].id", is(id)); - - // get just started approval - given() - .auth().oauth2(getAccessToken("mary")) - .accept(ContentType.JSON) - .when() - .get("/approvals/" + id) - .then() - .statusCode(200) - .body("id", is(id)); - - // tasks assigned in just started approval - - String taskInfo = given() - .auth() - .oauth2(getAccessToken("mary")) - .accept(ContentType.JSON) - .when() - .get("/approvals/" + id + "/tasks?user=admin&group=managers") - .then() - .statusCode(200) - .body("size()", is(1)) - .body("[0].name", is("firstLineApproval")) - .extract() - .path("[0].id"); - - String payload = "{}"; - given() - .auth().oauth2(getAccessToken("mary")) - .contentType(ContentType.JSON) - .accept(ContentType.JSON) - .body(payload) - .when() - .post("/approvals/" + id + "/firstLineApproval/" + taskInfo + "?user=mary&group=managers") - .then() - .statusCode(200) - .body("id", is(id)); - - // lastly abort the approval - given() - .auth().oauth2(getAccessToken("mary")) - .accept(ContentType.JSON) - .when() - .delete("/approvals/" + id) - .then() - .statusCode(200) - .body("id", is(id)); - } - - private String getAccessToken(String userName) { - return given() - .param("grant_type", "password") - .param("username", userName) - .param("password", userName) - .param("client_id", "kogito-app") - .param("client_secret", "secret") - .when() - .post(keycloakUrl + "/protocol/openid-connect/token") - .as(AccessTokenResponse.class).getToken(); - } -} diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/java/org/acme/travels/NativeApprovalsRestIT.java b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/java/org/acme/travels/NativeApprovalsRestIT.java deleted file mode 100644 index 9f995c102e..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/java/org/acme/travels/NativeApprovalsRestIT.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -import org.kie.kogito.testcontainers.quarkus.KafkaQuarkusTestResource; -import org.kie.kogito.testcontainers.quarkus.KeycloakQuarkusTestResource; - -import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.QuarkusIntegrationTest; - -@QuarkusIntegrationTest -@QuarkusTestResource(KeycloakQuarkusTestResource.class) -@QuarkusTestResource(KafkaQuarkusTestResource.class) -public class NativeApprovalsRestIT extends ApprovalsRestIT { - // run the same tests only against native image -} \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/resources/application.properties b/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/resources/application.properties deleted file mode 100644 index d7fdc50ccc..0000000000 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/src/test/resources/application.properties +++ /dev/null @@ -1,60 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# Quarkus -quarkus.http.test-port=0 - -quarkus.http.auth.permission.authenticated.paths=/* -quarkus.http.auth.permission.authenticated.policy=authenticated -quarkus.oidc.enabled=true -quarkus.oidc.tenant-enabled=true -quarkus.oidc.client-id=kogito-app -quarkus.oidc.credentials.secret=secret - -#Kafka -kafka.bootstrap.servers=localhost:9092 - -#mp.messaging.incoming.kogito_incoming_stream.bootstrap.servers=localhost:9092 -mp.messaging.incoming.kogito_incoming_stream.connector=smallrye-kafka -mp.messaging.incoming.kogito_incoming_stream.topic=visasresponses -mp.messaging.incoming.kogito_incoming_stream.value.deserializer=org.apache.kafka.common.serialization.StringDeserializer - -#mp.messaging.outgoing.kogito_outgoing_stream.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito_outgoing_stream.connector=smallrye-kafka -mp.messaging.outgoing.kogito_outgoing_stream.topic=visaapplications -mp.messaging.outgoing.kogito_outgoing_stream.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-processinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-processinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-processinstances-events.topic=kogito-processinstances-events -mp.messaging.outgoing.kogito-processinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-usertaskinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-usertaskinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-usertaskinstances-events.topic=kogito-usertaskinstances-events -mp.messaging.outgoing.kogito-usertaskinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-variables-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-variables-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-variables-events.topic=kogito-variables-events -mp.messaging.outgoing.kogito-variables-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -mp.messaging.outgoing.kogito-processdefinitions-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-processdefinitions-events.topic=kogito-processdefinitions-events -mp.messaging.outgoing.kogito-processdefinitions-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer \ No newline at end of file diff --git a/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/README.md b/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/README.md index 6a23b722e3..56f93ed6c1 100644 --- a/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/README.md +++ b/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/README.md @@ -23,12 +23,7 @@ mvn clean compile quarkus:dev The tracing addon emits tracing events to a Kafka broker running within Quarkus DevServices. A [Trusty Service](https://github.com/apache/incubator-kie-kogito-apps/tree/main/trusty) instance, also running within Quarkus DevServices, consumes the events and stores them in a PostgreSQL instance running -within Quarkus DevServices too. Within Quarkus DevMode the DevMode UI can be launched by pressing [d] or navigating to -http://localhost:8080/q/dev/. - -![DEV-UI](TrustyTracingQuarkusDevUi.png) - -The DevUI can be used to launch the Audit Investigation console from the Kogito Runtime Tools card. +within Quarkus DevServices too. ## Example Usage diff --git a/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/TrustyTracingQuarkusDevUi.png b/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/TrustyTracingQuarkusDevUi.png deleted file mode 100644 index f7b25d92a3..0000000000 Binary files a/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/TrustyTracingQuarkusDevUi.png and /dev/null differ diff --git a/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/pom.xml b/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/pom.xml index ede25ad44a..66bbc21976 100644 --- a/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/pom.xml +++ b/kogito-quarkus-examples/trusty-tracing-quarkus-devservices/pom.xml @@ -66,10 +66,6 @@ org.kie kie-addons-quarkus-tracing-decision - - org.jbpm - jbpm-quarkus-devui - io.quarkus quarkus-resteasy diff --git a/kogito-springboot-examples/pom.xml b/kogito-springboot-examples/pom.xml index 1e39149b71..7755fbd52e 100644 --- a/kogito-springboot-examples/pom.xml +++ b/kogito-springboot-examples/pom.xml @@ -84,9 +84,7 @@ process-springboot-example process-timer-springboot process-usertasks-custom-lifecycle-springboot - process-usertasks-springboot-with-console process-usertasks-springboot - process-usertasks-with-security-oidc-springboot-with-console process-usertasks-with-security-oidc-springboot process-usertasks-with-security-springboot rules-legacy-springboot-example @@ -127,9 +125,7 @@ process-springboot-example process-timer-springboot process-usertasks-custom-lifecycle-springboot - process-usertasks-springboot-with-console process-usertasks-springboot - process-usertasks-with-security-oidc-springboot-with-console process-usertasks-with-security-oidc-springboot process-usertasks-with-security-springboot ruleunit-springboot-example diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/README.md b/kogito-springboot-examples/process-usertasks-springboot-with-console/README.md deleted file mode 100644 index f42d43c673..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/README.md +++ /dev/null @@ -1,229 +0,0 @@ -# Process user task orchestration - -## Description - -A quickstart project shows very typical user task orchestration. It comes with two tasks assigned -to human actors via groups assignments - `managers`. So essentially anyone who is a member of that -group can act on the tasks. Though this example applies four eye principle which essentially means -that user who approved first task cannot approve second one. So there must be always at least two -distinct manager involved. - -> **_NOTE:_** This example uses keycloak authentication to enable security only in the consoles and not in runtime. - -This example shows - -* working with user tasks -* four eye principle with user tasks - - -

- -* Diagram Properties (top) -

- -* Diagram Properties (bottom) -

- -* First Line Approval (top) -

- -* First Line Approval (bottom) -

- -* First Line Approval (Assignments) -

- -* Second Line Approval -

- -* Second Line Approval (Assignments) -

- -## Build and run - -### Prerequisites - -You will need: - - Java 11+ installed - - Environment variable JAVA_HOME set accordingly - - Maven 3.8.6+ installed -### Starting the Kogito and Infrastructure Services - -This quickstart provides a docker compose template that starts all the required services. This setup ensures that all services are connected with a default configuration. - -

- -You should start all the services before you execute any of the **Approvals** example, to do that please execute: - -For Linux and MacOS: - -1. Open a Terminal -2. Go to the process-usertasks-springboot-with-console folder at kogito-examples - -```bash -cd /docker-compose -``` - -3. Run the ```startServices.sh``` script - -```bash -sh ./startServices.sh -``` - -Once all services bootstrap, the following ports will be assigned on your local machine: - -- Infinispan: 11222 -- Kafka: 9092 -- Data Index: 8180 -- Management Console: 8280 -- Task Console: 8380 -- Keycloak: 8480 -- process-usertasks-springboot-with-console: 8080 - -> **_NOTE:_** This step requires the project to be compiled, please consider running a ```mvn clean install -Pcontainer``` command on the project root before running the ```startServices.sh``` script for the first time or any time you modify the project. ```-Pcontainer``` will create a local docker image of the example and will be run by docker-compose with all required services. - -Once started you can simply stop all services by executing the ```docker-compose stop```. - -All created containers can be removed by executing the ```docker-compose rm```. - -### Using Keycloak as Authentication Server - -In this Quickstart we'll be using [Keycloak](https://www.keycloak.org/) as *Authentication Server*. It will be started as a part of the project *Infrastructure Services*, you can check the configuration on the project [docker-compose.yml](docker-compose/docker-compose.yml) in [docker-compose](docker-compose) folder. - -It will install the *Kogito Realm* that comes with a predefined set of users: -| Login | Password | Roles | -| ------------- | ---------- | ------------------- | -| admin | admin | *admin*, *managers* | -| alice | alice | *user* | -| jdoe | jdoe | *managers* | - -Once Keycloak is started, you should be able to access your *Keycloak Server* at [localhost:8480/auth](http://localhost:8480/auth) with *admin* user. - -> **_NOTE:_** If you don't want to run the example inside docker compose. You can stop the service container by running below commands. - - docker stop process-usertasks-springboot-with-console - -### Compile and Run in Local Dev Mode - -```sh -mvn clean compile spring-boot:run -``` - - -### Package and Run using uberjar - -```sh -mvn clean package -``` - -To run the generated native executable, generated in `target/`, execute - -```sh -java -jar target/process-usertasks-springboot-with-console.jar -``` - -### OpenAPI (Swagger) documentation -[Specification at swagger.io](https://swagger.io/docs/specification/about/) - -You can take a look at the [OpenAPI definition](http://localhost:8080/v3/api-docs) - automatically generated and included in this service - to determine all available operations exposed by this service. For easy readability you can visualize the OpenAPI definition file using a UI tool like for example available [Swagger UI](https://editor.swagger.io). - -In addition, various clients to interact with this service can be easily generated using this OpenAPI definition. - - -### Submit a request to start new approval - -To make use of this application it is as simple as putting a sending request to `http://localhost:8080/approvals` with following content - -```json -{ - "traveller" : { - "firstName" : "John", - "lastName" : "Doe", - "email" : "jon.doe@example.com", - "nationality" : "American", - "address" : { - "street" : "main street", - "city" : "Boston", - "zipCode" : "10005", - "country" : "US" } - } -} -``` - -Complete curl command can be found below: - -```sh -curl -X POST -H 'Content-Type:application/json' -H 'Accept:application/json' -d '{"traveller" : { "firstName" : "John", "lastName" : "Doe", "email" : "jon.doe@example.com", "nationality" : "American","address" : { "street" : "main street", "city" : "Boston", "zipCode" : "10005", "country" : "US" }}}' http://localhost:8080/approvals -``` - -### Show active process instances at Kogito Management Console - -To access the Kogito Management Console just open your browser and navigate to ``http://localhost:8280``. You'll be redirected to the *Keycloak* log in page. - -

- -

- -Once there, log in using any of the users specified in the [Using Keycloak as Authentication Server](#using-keycloak-as-authentication-server) - -

- -

- -> **_NOTE:_** For more information about how to work with Kogito Management Console, please refer to the [Kogito Management Console Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#con-management-console_kogito-developing-process-services) page. - -Check the process instance details to see where is the execution path - -

- -

- -### Execute 'First Line approval' task at Kogito Task Console - -To access the Kogito Task Console just open your browser and navigate to ``http://localhost:8380``. You'll be redirected to the *Keycloak* log in page. - -

- -

- -Ensure you are logged as a user with role manager to be able to see the First Line approval. - -

- -

- -> **_NOTE:_** For more information about how to work with Kogito Task Console, please refer to the [Kogito Task Console Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#con-task-console_kogito-developing-process-services) page. - -Access to 'First Line approval' task and complete - -

- -

- -Check the process instance details at Kogito Management Console to see the execution path reflects the completed task - -

- -

- -### Execute 'Second Line approval' task at Kogito Task Console - -Access the Kogito Task Console and ensure you are logged as a user with role managers different from the one -executed the First Line approval to be able to see the Second Line approval -following the second eye principle. - -

- -

- -Access to 'Second Line approval' task and complete - -

- -

- -Check the process instance details at Kogito Management Console, and verify the execution path is reflected in the diagram. - -

- -

diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/.gitignore b/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/.gitignore deleted file mode 100644 index b6632dbda5..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.env -svg/ -persistence/ \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/README.md b/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/README.md deleted file mode 100644 index 407b5072fb..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/README.md +++ /dev/null @@ -1,58 +0,0 @@ -## Kogito and Infrastructure services - -To allow a quick setup of all services required to run this demo, we provide a docker compose template that starts the following services: -- Infinispan -- Kafka -- Kogito Data Index -- Kogito Management Console -- Kogito Task Console -- Keycloak -- process-usertasks-springboot-with-console - -In order to use it, please ensure you have Docker Compose installed on your machine, otherwise follow the instructions available - in [here](https://docs.docker.com/compose/install/). - -### Starting required services - - Before you execute the **Hiring** example, start all the services by following these steps: - - For Linux and MacOS: - - ./startServices.sh - - For Windows: - - Create a .env file with the content containing the version of the Kogito images you would like to run, example: - - KOGITO_VERSION=1.0.0 - - Then run - - docker-compose up - - Once all services bootstrap, the following ports will be assigned on your local machine: - - Infinispan: 11222 - - Kafka: 9092 - - Data Index: 8180 - - Management Console: 8280 - - Task Console: 8380 - - Keycloak: 8480 - - process-usertasks-springboot-with-console: 8080 - -> **_NOTE:_** If you don't want to run the example inside docker compose. You can stop the container by running below commands. - - docker stop process-usertasks-springboot-with-console - -### Stopping and removing volume data - - To stop all services, simply run: - - docker-compose stop - - It is also recommended to remove any of stopped containers by running: - - docker-compose rm - - For more details please check the Docker Compose documentation. - - docker-compose --help diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/docker-compose.yml b/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/docker-compose.yml deleted file mode 100755 index 48ef9fa4bf..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/docker-compose.yml +++ /dev/null @@ -1,150 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -version: '2.1' - -services: - - infinispan: - image: infinispan/server:14.0.4.Final - container_name: infinispan - ports: - - "11222:11222" - command: "-c infinispan-demo.xml" - volumes: - - ./infinispan/infinispan.xml:/opt/infinispan/server/conf/infinispan-demo.xml:z - healthcheck: - test: [ "CMD", "curl", "-f", "http://localhost:11222/rest/v2/cache-managers/default/health/status" ] - interval: 1s - timeout: 30s - retries: 50 - - zookeeper: - container_name: zookeeper - image: strimzi/kafka:0.20.1-kafka-2.6.0 - command: [ - "sh", "-c", - "bin/zookeeper-server-start.sh config/zookeeper.properties" - ] - ports: - - "2181:2181" - environment: - LOG_DIR: "/tmp/logs" - - kafka: - image: strimzi/kafka:0.20.1-kafka-2.6.0 - container_name: kafka - command: [ - "sh", "-c", - "bin/kafka-server-start.sh config/server.properties --override inter.broker.listener.name=$${KAFKA_INTER_BROKER_LISTENER_NAME} --override listener.security.protocol.map=$${KAFKA_LISTENER_SECURITY_PROTOCOL_MAP} --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}" - ] - depends_on: - - zookeeper - ports: - - "9092:9092" - environment: - KAFKA_BROKER_ID: 0 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://kafka:9092 - KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://localhost:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT - KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL - KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 - LOG_DIR: "/tmp/logs" - - keycloak: - container_name: keycloak - image: quay.io/keycloak/keycloak:legacy - ports: - - "8480:8080" - volumes: - - ./keycloak/kogito-realm.json:/tmp/kogito-realm.json - healthcheck: - test: [ "CMD", "curl", "-f", "http://localhost:8080/auth/realms/kogito" ] - interval: 1s - timeout: 1s - retries: 50 - environment: - KEYCLOAK_USER: admin - KEYCLOAK_PASSWORD: admin - KEYCLOAK_IMPORT: /tmp/kogito-realm.json - - data-index: - container_name: data-index - image: quay.io/kiegroup/kogito-data-index-infinispan:${KOGITO_VERSION} - ports: - - "8180:8080" - depends_on: - kafka: - condition: service_started - infinispan: - condition: service_healthy - volumes: - - ./persistence/:/home/kogito/data/protobufs/ - environment: - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - QUARKUS_INFINISPAN_CLIENT_HOSTS: infinispan:11222 - QUARKUS_INFINISPAN_CLIENT_USE_AUTH: "false" - KAFKA_BOOTSTRAP_SERVERS: kafka:29092 - KOGITO_DATA_INDEX_PROPS: -Dkogito.protobuf.folder=/home/kogito/data/protobufs/ - - management-console: - container_name: management-console - image: quay.io/kiegroup/kogito-management-console:${KOGITO_VERSION} - ports: - - 8280:8080 - depends_on: - data-index: - condition: service_started - keycloak: - condition: service_healthy - volumes: - - ./svg/:/home/kogito/data/svg/ - environment: - KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql - KOGITO_MANAGEMENT_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://localhost:8480/auth -Dkogito.consoles.keycloak.config.health-check-url=http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration -Dkogito.svg.folder.path=/home/kogito/data/svg - - task-console: - container_name: task-console - image: quay.io/kiegroup/kogito-task-console:${KOGITO_VERSION} - ports: - - 8380:8080 - depends_on: - data-index: - condition: service_started - keycloak: - condition: service_healthy - environment: - KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql - KOGITO_TASK_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://localhost:8480/auth -Dkogito.consoles.keycloak.config.health-check-url=http://localhost:8480/auth/realms/kogito/.well-known/openid-configuration - - process-usertasks-springboot-with-console: - container_name: process-usertasks-springboot-with-console - image: org.kie.kogito.examples/process-usertasks-springboot-with-console:1.0 - ports: - - 8080:8080 - depends_on: - infinispan: - condition: service_healthy - data-index: - condition: service_started - environment: - INFINISPAN_REMOTE_SERVER_LIST: infinispan:11222 - SPRING_KAFKA_BOOTSTRAP_SERVERS: kafka:29092 \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/infinispan/infinispan.xml b/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/infinispan/infinispan.xml deleted file mode 100755 index a466561b9f..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/infinispan/infinispan.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/keycloak/kogito-realm.json b/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/keycloak/kogito-realm.json deleted file mode 100644 index fd3cdc0942..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/keycloak/kogito-realm.json +++ /dev/null @@ -1,2242 +0,0 @@ -{ - "realm": "kogito", - "notBefore": 0, - "revokeRefreshToken": false, - "refreshTokenMaxReuse": 0, - "accessTokenLifespan": 300, - "accessTokenLifespanForImplicitFlow": 900, - "ssoSessionIdleTimeout": 1800, - "ssoSessionMaxLifespan": 36000, - "ssoSessionIdleTimeoutRememberMe": 0, - "ssoSessionMaxLifespanRememberMe": 0, - "offlineSessionIdleTimeout": 2592000, - "offlineSessionMaxLifespanEnabled": false, - "offlineSessionMaxLifespan": 5184000, - "accessCodeLifespan": 60, - "accessCodeLifespanUserAction": 300, - "accessCodeLifespanLogin": 1800, - "actionTokenGeneratedByAdminLifespan": 43200, - "actionTokenGeneratedByUserLifespan": 300, - "enabled": true, - "sslRequired": "external", - "registrationAllowed": false, - "registrationEmailAsUsername": false, - "rememberMe": false, - "verifyEmail": false, - "loginWithEmailAllowed": true, - "duplicateEmailsAllowed": false, - "resetPasswordAllowed": false, - "editUsernameAllowed": false, - "bruteForceProtected": false, - "permanentLockout": false, - "maxFailureWaitSeconds": 900, - "minimumQuickLoginWaitSeconds": 60, - "waitIncrementSeconds": 60, - "quickLoginCheckMilliSeconds": 1000, - "maxDeltaTimeSeconds": 43200, - "failureFactor": 30, - "roles": { - "realm": [ - { - "name": "managers", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "uma_authorization", - "description": "${role_uma_authorization}", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "admin", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "user", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "HR", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "IT", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "offline_access", - "description": "${role_offline-access}", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - } - ], - "client": { - "realm-management": [ - { - "name": "manage-identity-providers", - "description": "${role_manage-identity-providers}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "impersonation", - "description": "${role_impersonation}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-identity-providers", - "description": "${role_view-identity-providers}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-realm", - "description": "${role_view-realm}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-users", - "description": "${role_query-users}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-clients", - "description": "${role_manage-clients}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-events", - "description": "${role_manage-events}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "realm-admin", - "description": "${role_realm-admin}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "impersonation", - "manage-identity-providers", - "view-identity-providers", - "view-realm", - "query-users", - "manage-clients", - "manage-events", - "manage-realm", - "view-authorization", - "manage-authorization", - "view-users", - "create-client", - "query-clients", - "query-groups", - "manage-users", - "view-clients", - "view-events", - "query-realms" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-realm", - "description": "${role_manage-realm}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-authorization", - "description": "${role_view-authorization}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-authorization", - "description": "${role_manage-authorization}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "create-client", - "description": "${role_create-client}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-users", - "description": "${role_view-users}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "query-groups", - "query-users" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-clients", - "description": "${role_query-clients}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-groups", - "description": "${role_query-groups}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-users", - "description": "${role_manage-users}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-clients", - "description": "${role_view-clients}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "query-clients" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-events", - "description": "${role_view-events}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-realms", - "description": "${role_query-realms}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - } - ], - "security-admin-console": [], - "admin-cli": [], - "kogito-service": [ - { - "name": "uma_protection", - "composite": false, - "clientRole": true, - "containerId": "0ac5df91-e044-4051-bd03-106a3a5fb9cc", - "attributes": {} - } - ], - "broker": [ - { - "name": "read-token", - "description": "${role_read-token}", - "composite": false, - "clientRole": true, - "containerId": "53d4fe53-a039-471e-886a-28eddc950e95", - "attributes": {} - } - ], - "account": [ - { - "name": "view-profile", - "description": "${role_view-profile}", - "composite": false, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - }, - { - "name": "manage-account", - "description": "${role_manage-account}", - "composite": true, - "composites": { - "client": { - "account": [ - "manage-account-links" - ] - } - }, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - }, - { - "name": "manage-account-links", - "description": "${role_manage-account-links}", - "composite": false, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - } - ] - } - }, - "groups": [], - "defaultRoles": [ - "uma_authorization", - "offline_access" - ], - "requiredCredentials": [ - "password" - ], - "otpPolicyType": "totp", - "otpPolicyAlgorithm": "HmacSHA1", - "otpPolicyInitialCounter": 0, - "otpPolicyDigits": 6, - "otpPolicyLookAheadWindow": 1, - "otpPolicyPeriod": 30, - "otpSupportedApplications": [ - "FreeOTP", - "Google Authenticator" - ], - "scopeMappings": [ - { - "clientScope": "offline_access", - "roles": [ - "offline_access" - ] - } - ], - "clients": [ - { - "clientId": "account", - "name": "${client_account}", - "baseUrl": "/auth/realms/kogito/account", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "0136c3ef-0dfd-4b13-a6d0-2c8b6358edec", - "defaultRoles": [ - "view-profile", - "manage-account" - ], - "redirectUris": [ - "/auth/realms/kogito/account/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "admin-cli", - "name": "${client_admin-cli}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "a951803a-79c7-46a6-8197-e32835286971", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": false, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "broker", - "name": "${client_broker}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "e1f7edd7-e15c-43b4-8736-ff8204d16836", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-frontend", - "rootUrl": "http://localhost:8082", - "adminUrl": "http://localhost:8082", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8082/*" - ], - "webOrigins": [ - "http://localhost:8082" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "kogito-app", - "rootUrl": "http://localhost:8080", - "adminUrl": "http://localhost:8080", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8080/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "kogito-service", - "rootUrl": "", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": true, - "authorizationServicesEnabled": true, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "name": "Client ID", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientId", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientId", - "jsonType.label": "String" - } - }, - { - "name": "Client IP Address", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientAddress", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientAddress", - "jsonType.label": "String" - } - }, - { - "name": "Client Host", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientHost", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientHost", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "authorizationSettings": { - "allowRemoteResourceManagement": true, - "policyEnforcementMode": "ENFORCING", - "resources": [ - { - "name": "User Resource", - "ownerManagedAccess": false, - "attributes": {}, - "_id": "df1b74a9-3f10-499d-a581-368de48e512b", - "uris": [ - "/api/users/*" - ] - }, - { - "name": "Administration Resource", - "ownerManagedAccess": false, - "attributes": {}, - "_id": "7124e2f1-e6dc-44b4-87ab-24b010090b97", - "uris": [ - "/api/admin/*" - ] - } - ], - "policies": [ - { - "name": "Any User Policy", - "description": "Any user granted with the user role can access something", - "type": "role", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "roles": "[{\"id\":\"user\",\"required\":false}]" - } - }, - { - "name": "Only Administrators", - "description": "Only administrators can access", - "type": "role", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "roles": "[{\"id\":\"admin\",\"required\":false}]" - } - }, - { - "name": "User Resource Permission", - "type": "resource", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "resources": "[\"User Resource\"]", - "applyPolicies": "[\"Any User Policy\"]" - } - }, - { - "name": "Administration Resource Permission", - "type": "resource", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "resources": "[\"Administration Resource\"]", - "applyPolicies": "[\"Only Administrators\"]" - } - } - ], - "scopes": [], - "decisionStrategy": "UNANIMOUS" - } - }, - { - "clientId": "kogito-console-react", - "rootUrl": "http://localhost:9000", - "adminUrl": "http://localhost:9000/", - "baseUrl": "http://localhost:9000/", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "http://localhost:9000/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-console-quarkus", - "rootUrl": "http://localhost:8380", - "adminUrl": "http://localhost:8380/", - "baseUrl": "http://localhost:8380/", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "http://localhost:8380/*", - "http://localhost:8280/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "name": "groups", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "user.attribute": "foo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "groups", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-jobs-service", - "rootUrl": "http://localhost:8080", - "adminUrl": "http://localhost:8080", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8080/*" - ], - "webOrigins": [ - "http://localhost:8080" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "realm-management", - "name": "${client_realm-management}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "c41b709a-a012-4c69-89d7-4f926dba0619", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": true, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "security-admin-console", - "name": "${client_security-admin-console}", - "baseUrl": "/auth/admin/kogito/console/index.html", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "e571b211-2550-475d-b87f-116ff54091ee", - "redirectUris": [ - "/auth/admin/kogito/console/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "protocolMappers": [ - { - "name": "locale", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "locale", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "locale", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - } - ], - "clientScopes": [ - { - "name": "address", - "description": "OpenID Connect built-in scope: address", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${addressScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "address", - "protocol": "openid-connect", - "protocolMapper": "oidc-address-mapper", - "consentRequired": false, - "config": { - "user.attribute.formatted": "formatted", - "user.attribute.country": "country", - "user.attribute.postal_code": "postal_code", - "userinfo.token.claim": "true", - "user.attribute.street": "street", - "id.token.claim": "true", - "user.attribute.region": "region", - "access.token.claim": "true", - "user.attribute.locality": "locality" - } - } - ] - }, - { - "name": "email", - "description": "OpenID Connect built-in scope: email", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${emailScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "email", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "email", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "email", - "jsonType.label": "String" - } - }, - { - "name": "email verified", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "emailVerified", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "email_verified", - "jsonType.label": "boolean" - } - } - ] - }, - { - "name": "microprofile-jwt", - "description": "Microprofile - JWT built-in scope", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "false" - }, - "protocolMappers": [ - { - "name": "upn", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "username", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "upn", - "jsonType.label": "String" - } - }, - { - "name": "groups", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "user.attribute": "foo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "groups", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "offline_access", - "description": "OpenID Connect built-in scope: offline_access", - "protocol": "openid-connect", - "attributes": { - "consent.screen.text": "${offlineAccessScopeConsentText}", - "display.on.consent.screen": "true" - } - }, - { - "name": "phone", - "description": "OpenID Connect built-in scope: phone", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${phoneScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "phone number verified", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "phoneNumberVerified", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "phone_number_verified", - "jsonType.label": "boolean" - } - }, - { - "name": "phone number", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "phoneNumber", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "phone_number", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "profile", - "description": "OpenID Connect built-in scope: profile", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${profileScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "nickname", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "nickname", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "nickname", - "jsonType.label": "String" - } - }, - { - "name": "zoneinfo", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "zoneinfo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "zoneinfo", - "jsonType.label": "String" - } - }, - { - "name": "updated at", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "updatedAt", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "updated_at", - "jsonType.label": "String" - } - }, - { - "name": "birthdate", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "birthdate", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "birthdate", - "jsonType.label": "String" - } - }, - { - "name": "given name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "firstName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "given_name", - "jsonType.label": "String" - } - }, - { - "name": "full name", - "protocol": "openid-connect", - "protocolMapper": "oidc-full-name-mapper", - "consentRequired": false, - "config": { - "id.token.claim": "true", - "access.token.claim": "true", - "userinfo.token.claim": "true" - } - }, - { - "name": "middle name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "middleName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "middle_name", - "jsonType.label": "String" - } - }, - { - "name": "username", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "username", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "preferred_username", - "jsonType.label": "String" - } - }, - { - "name": "family name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "lastName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "family_name", - "jsonType.label": "String" - } - }, - { - "name": "gender", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "gender", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "gender", - "jsonType.label": "String" - } - }, - { - "name": "picture", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "picture", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "picture", - "jsonType.label": "String" - } - }, - { - "name": "locale", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "locale", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "locale", - "jsonType.label": "String" - } - }, - { - "name": "profile", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "profile", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "profile", - "jsonType.label": "String" - } - }, - { - "name": "website", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "website", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "website", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "role_list", - "description": "SAML role list", - "protocol": "saml", - "attributes": { - "consent.screen.text": "${samlRoleListScopeConsentText}", - "display.on.consent.screen": "true" - }, - "protocolMappers": [ - { - "name": "role list", - "protocol": "saml", - "protocolMapper": "saml-role-list-mapper", - "consentRequired": false, - "config": { - "single": "false", - "attribute.nameformat": "Basic", - "attribute.name": "Role" - } - } - ] - }, - { - "name": "roles", - "description": "OpenID Connect scope for add user roles to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "false", - "display.on.consent.screen": "true", - "consent.screen.text": "${rolesScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "realm roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "realm_access.roles", - "jsonType.label": "String", - "multivalued": "true" - } - }, - { - "name": "audience resolve", - "protocol": "openid-connect", - "protocolMapper": "oidc-audience-resolve-mapper", - "consentRequired": false, - "config": {} - }, - { - "name": "client roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-client-role-mapper", - "consentRequired": false, - "config": { - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "resource_access.${client_id}.roles", - "jsonType.label": "String", - "multivalued": "true" - } - } - ] - }, - { - "name": "web-origins", - "description": "OpenID Connect scope for add allowed web origins to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "false", - "display.on.consent.screen": "false", - "consent.screen.text": "" - }, - "protocolMappers": [ - { - "name": "allowed web origins", - "protocol": "openid-connect", - "protocolMapper": "oidc-allowed-origins-mapper", - "consentRequired": false, - "config": {} - } - ] - } - ], - "defaultDefaultClientScopes": [ - "role_list", - "profile", - "email", - "roles", - "web-origins" - ], - "defaultOptionalClientScopes": [ - "offline_access", - "address", - "phone", - "microprofile-jwt" - ], - "browserSecurityHeaders": { - "contentSecurityPolicyReportOnly": "", - "xContentTypeOptions": "nosniff", - "xRobotsTag": "none", - "xFrameOptions": "SAMEORIGIN", - "xXSSProtection": "1; mode=block", - "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", - "strictTransportSecurity": "max-age=31536000; includeSubDomains" - }, - "smtpServer": {}, - "eventsEnabled": false, - "eventsListeners": [ - "jboss-logging" - ], - "enabledEventTypes": [], - "adminEventsEnabled": false, - "adminEventsDetailsEnabled": false, - "components": { - "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ - { - "name": "Allowed Protocol Mapper Types", - "providerId": "allowed-protocol-mappers", - "subType": "anonymous", - "subComponents": {}, - "config": { - "allowed-protocol-mapper-types": [ - "oidc-full-name-mapper", - "saml-user-attribute-mapper", - "saml-user-property-mapper", - "oidc-address-mapper", - "saml-role-list-mapper", - "oidc-sha256-pairwise-sub-mapper", - "oidc-usermodel-attribute-mapper", - "oidc-usermodel-property-mapper" - ] - } - }, - { - "name": "Allowed Client Scopes", - "providerId": "allowed-client-templates", - "subType": "authenticated", - "subComponents": {}, - "config": { - "allow-default-scopes": [ - "true" - ] - } - }, - { - "name": "Allowed Client Scopes", - "providerId": "allowed-client-templates", - "subType": "anonymous", - "subComponents": {}, - "config": { - "allow-default-scopes": [ - "true" - ] - } - }, - { - "name": "Trusted Hosts", - "providerId": "trusted-hosts", - "subType": "anonymous", - "subComponents": {}, - "config": { - "host-sending-registration-request-must-match": [ - "true" - ], - "client-uris-must-match": [ - "true" - ] - } - }, - { - "name": "Full Scope Disabled", - "providerId": "scope", - "subType": "anonymous", - "subComponents": {}, - "config": {} - }, - { - "name": "Max Clients Limit", - "providerId": "max-clients", - "subType": "anonymous", - "subComponents": {}, - "config": { - "max-clients": [ - "200" - ] - } - }, - { - "name": "Consent Required", - "providerId": "consent-required", - "subType": "anonymous", - "subComponents": {}, - "config": {} - }, - { - "name": "Allowed Protocol Mapper Types", - "providerId": "allowed-protocol-mappers", - "subType": "authenticated", - "subComponents": {}, - "config": { - "allowed-protocol-mapper-types": [ - "saml-user-attribute-mapper", - "oidc-full-name-mapper", - "saml-role-list-mapper", - "saml-user-property-mapper", - "oidc-usermodel-attribute-mapper", - "oidc-address-mapper", - "oidc-usermodel-property-mapper", - "oidc-sha256-pairwise-sub-mapper" - ] - } - } - ], - "org.keycloak.keys.KeyProvider": [ - { - "name": "rsa-generated", - "providerId": "rsa-generated", - "subComponents": {}, - "config": { - "privateKey": [ - "MIIEowIBAAKCAQEAn5T13suF8mlS+pJXp0U1bto41nW55wpcs+Rps8ZVCRyJKWqzwSCYnI7lm0rB2wBpAAO4OPoj1zlmVoFmBPsDU9Xf7rjsJb5LIzIQDCZY44aSDZt6RR+gakPiQvlzHyW/RozYpngDJF7TsTD7rdRF1xQ4RprfBF8fwK/xsU7pxbeom5xDHZhz3fiw8s+7UdbmnazDHfAjU58aUrLGgVRfUsuoHjtsptYlOIXEifaeMetXZE+HhqLYRHQPDap5fbBJl773Trosn7N9nmzN4x1xxGj9So21WC5UboQs9sAIVgizc4omjZ5Y4RN9HLH7G4YwJctNntzmnJhDui9zAO+zSQIDAQABAoIBADi+F7rTtVoft0Cfnok8o6Y58/HVxHdxiMryUd95iy0FN4RBi48FTx6D9QKFz25Ws/8sU2n3D51srIXf1u24b1N0/f39RQKaqk7mcyxOylaEuBQcj5pah4ihgKd92UBfBKdKV5LBo6RgD3e2yhbiHr8+UlBQqzH7vOef6Bm6zIbfmi3N88swAJhP0YizRZFklsbmLsK6nkwyro00CHJvPVKSBbM+ad+/zIBsLw56MvNngB5TuFguUgoljd6M1T2z4utmZGlTUqrfE1onAVLJZoGnRohyIr7dJEg6YxWR70PxsgmkDKyeRvet9P1trO0n+OSprusfrC3cHJStabap1V0CgYEA1A/CtsqTnjdYYsB19eumZgdpzUgNc/YEAzZ/OWb8yTLoB2ncci+63A1rXHUXAqJFY7vtjn5mxv7SuASNbUrzq+6KfZvC1x9XEtnczqT/ypunNfxmIZuj8Nuu6vtURguZ8kPPwdkI8toTizRFeRE5ZDBvoQryiEVYugfHaHT5vzsCgYEAwKWODwquI0Lv9BuwdNVrBXQpkKh3ZfYOA7i9xvhxlM7xUu8OMCwwCPn3r7vrW5APjTqX4h330mJ44SLEs+7gbCUs4BbJBLA6g0ChlHa9PTkxp6tk2nDF/B34fxiZSRkE85L+d+at0Dc3hnlzLCJCzJawGpoPniPU9e4w0p4dN0sCgYAsGnMGjS8SUrRhJWHjGXVr9tK8TOXvXhULjgP7rj2Yoqu7Dvs4DFEyft/7RKbad2EzEtyfLA64CDtO5jN7rYDsGxpWcVSeZPg5BXJ0z8AbJTArfCjJiJMZ/rZsTIUEZFlKF2xYBolj6JLz+pUQTtK+0YwF1D8ItFN1rTR9twZSDQKBgQC6sPXNX+VH6LuPTjIf1x8CxwLs3EXxOpV0R9kp9GRl+HJnk6GlT30xhcThufQo5KAdllXQXIhoiuNoEoCbevhj9Vbax1oBQCNERSMRNEzKAx46xd9TzYwgeo7x5E3QR/3DaoVOfu+cY5ZcrF/PulgP2kxJS1mtQD5GIpGP2oinpwKBgGqiqTFPqRcelx76vBvTU+Jp1zM62T4AotbMrSQR/oUvqHe5Ytj/SbZx+wbbHAiyGgV700Mosyviik83YEAbR3kdOPjgYvAJJW2Y3jEMdQ7MwriXz8XLh5BGmYfVjkSOJXed9ua9WlYLKOJeXXv191BbDvrx5NXuJyVVU4vJx3YZ" - ], - "certificate": [ - "MIICnTCCAYUCBgFp4EYIrjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdwcm90ZWFuMB4XDTE5MDQwMjIyNTYxOVoXDTI5MDQwMjIyNTc1OVowEjEQMA4GA1UEAwwHcHJvdGVhbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+U9d7LhfJpUvqSV6dFNW7aONZ1uecKXLPkabPGVQkciSlqs8EgmJyO5ZtKwdsAaQADuDj6I9c5ZlaBZgT7A1PV3+647CW+SyMyEAwmWOOGkg2bekUfoGpD4kL5cx8lv0aM2KZ4AyRe07Ew+63URdcUOEaa3wRfH8Cv8bFO6cW3qJucQx2Yc934sPLPu1HW5p2swx3wI1OfGlKyxoFUX1LLqB47bKbWJTiFxIn2njHrV2RPh4ai2ER0Dw2qeX2wSZe+9066LJ+zfZ5szeMdccRo/UqNtVguVG6ELPbACFYIs3OKJo2eWOETfRyx+xuGMCXLTZ7c5pyYQ7ovcwDvs0kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAVtmRKDb4OK5iSA46tagMBkp6L7WuPpCWuHGWwobEP+BecYsShW7zP3s12oA8SNSwbhvu0CRqgzxhuypgf3hKQFVU153Erv4hzkj+8S0s5LR/ZE7tDNY2lzJ3yQKXy3Md7EkuzzvOZ50MTrcSKAanWq/ZW1OTnrtGymj5zGJnTg7mMnJzEIGePxkvPu/QdchiPBLqxfZYm1jsFGY25djOC3N/KmVcRVmPRGuu6D8tBFHlKoPfZYPdbMvsvs24aupHKRcZ+ofTCpK+2Qo8c0pSSqeEYHGmuGqC6lC6ozxtxSABPO9Q1R1tZBU7Kg5HvXUwwmoVS3EGub46YbHqbmWMLg==" - ], - "priority": [ - "100" - ] - } - }, - { - "name": "hmac-generated", - "providerId": "hmac-generated", - "subComponents": {}, - "config": { - "kid": [ - "96afd00e-85cf-4d35-b18e-061d3813d8b2" - ], - "secret": [ - "qBFGKdUGf6xDgKphnRfoFzIzaFHJW4bYnZ9MinPFzN38X5_ctq-2u1q5RdZzeJukXvk2biHB8_s3DxWmmLZFsA" - ], - "priority": [ - "100" - ], - "algorithm": [ - "HS256" - ] - } - }, - { - "name": "aes-generated", - "providerId": "aes-generated", - "subComponents": {}, - "config": { - "kid": [ - "b04473d3-8395-4016-b455-19a9e951106b" - ], - "secret": [ - "x68mMOVdz3qKWzltzReV0g" - ], - "priority": [ - "100" - ] - } - } - ] - }, - "internationalizationEnabled": false, - "supportedLocales": [], - "authenticationFlows": [ - { - "alias": "Handle Existing Account", - "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-confirm-link", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "idp-email-verification", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "Verify Existing Account by Re-authentication", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "Verify Existing Account by Re-authentication", - "description": "Reauthentication of existing account", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-username-password-form", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-otp-form", - "requirement": "OPTIONAL", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "browser", - "description": "browser based authentication", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "auth-cookie", - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-spnego", - "requirement": "DISABLED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "identity-provider-redirector", - "requirement": "ALTERNATIVE", - "priority": 25, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "forms", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "clients", - "description": "Base authentication for clients", - "providerId": "client-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "client-secret", - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-jwt", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-secret-jwt", - "requirement": "ALTERNATIVE", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-x509", - "requirement": "ALTERNATIVE", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "direct grant", - "description": "OpenID Connect Resource Owner Grant", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "direct-grant-validate-username", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "direct-grant-validate-password", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "direct-grant-validate-otp", - "requirement": "OPTIONAL", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "docker auth", - "description": "Used by Docker clients to authenticate against the IDP", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "docker-http-basic-authenticator", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "first broker login", - "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticatorConfig": "review profile config", - "authenticator": "idp-review-profile", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorConfig": "create unique user config", - "authenticator": "idp-create-user-if-unique", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "Handle Existing Account", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "forms", - "description": "Username, password, otp and other auth forms.", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "auth-username-password-form", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-otp-form", - "requirement": "OPTIONAL", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "http challenge", - "description": "An authentication flow based on challenge-response HTTP Authentication Schemes", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "no-cookie-redirect", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "basic-auth", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "basic-auth-otp", - "requirement": "DISABLED", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-spnego", - "requirement": "DISABLED", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "registration", - "description": "registration flow", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "registration-page-form", - "requirement": "REQUIRED", - "priority": 10, - "flowAlias": "registration form", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "registration form", - "description": "registration form", - "providerId": "form-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "registration-user-creation", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-profile-action", - "requirement": "REQUIRED", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-password-action", - "requirement": "REQUIRED", - "priority": 50, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-recaptcha-action", - "requirement": "DISABLED", - "priority": 60, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "reset credentials", - "description": "Reset credentials for a user if they forgot their password or something", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "reset-credentials-choose-user", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-credential-email", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-password", - "requirement": "REQUIRED", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-otp", - "requirement": "OPTIONAL", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "saml ecp", - "description": "SAML ECP Profile Authentication Flow", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "http-basic-authenticator", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - } - ], - "authenticatorConfig": [ - { - "alias": "create unique user config", - "config": { - "require.password.update.after.registration": "false" - } - }, - { - "alias": "review profile config", - "config": { - "update.profile.on.first.login": "missing" - } - } - ], - "requiredActions": [ - { - "alias": "CONFIGURE_TOTP", - "name": "Configure OTP", - "providerId": "CONFIGURE_TOTP", - "enabled": true, - "defaultAction": false, - "priority": 10, - "config": {} - }, - { - "alias": "terms_and_conditions", - "name": "Terms and Conditions", - "providerId": "terms_and_conditions", - "enabled": false, - "defaultAction": false, - "priority": 20, - "config": {} - }, - { - "alias": "UPDATE_PASSWORD", - "name": "Update Password", - "providerId": "UPDATE_PASSWORD", - "enabled": true, - "defaultAction": false, - "priority": 30, - "config": {} - }, - { - "alias": "UPDATE_PROFILE", - "name": "Update Profile", - "providerId": "UPDATE_PROFILE", - "enabled": true, - "defaultAction": false, - "priority": 40, - "config": {} - }, - { - "alias": "VERIFY_EMAIL", - "name": "Verify Email", - "providerId": "VERIFY_EMAIL", - "enabled": true, - "defaultAction": false, - "priority": 50, - "config": {} - } - ], - "browserFlow": "browser", - "registrationFlow": "registration", - "directGrantFlow": "direct grant", - "resetCredentialsFlow": "reset credentials", - "clientAuthenticationFlow": "clients", - "dockerAuthenticationFlow": "docker auth", - "attributes": { - "_browser_header.xXSSProtection": "1; mode=block", - "_browser_header.xFrameOptions": "SAMEORIGIN", - "_browser_header.strictTransportSecurity": "max-age=31536000; includeSubDomains", - "permanentLockout": "false", - "quickLoginCheckMilliSeconds": "1000", - "_browser_header.xRobotsTag": "none", - "maxFailureWaitSeconds": "900", - "minimumQuickLoginWaitSeconds": "60", - "failureFactor": "30", - "actionTokenGeneratedByUserLifespan": "300", - "maxDeltaTimeSeconds": "43200", - "_browser_header.xContentTypeOptions": "nosniff", - "offlineSessionMaxLifespan": "5184000", - "actionTokenGeneratedByAdminLifespan": "43200", - "_browser_header.contentSecurityPolicyReportOnly": "", - "bruteForceProtected": "false", - "_browser_header.contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", - "waitIncrementSeconds": "60", - "offlineSessionMaxLifespanEnabled": "false" - }, - "users": [ - { - "username": "admin", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "NICTtwsvSxJ5hL8hLAuleDUv9jwZcuXgxviMXvR++cciyPtiIEStEaJUyfA9DOir59awjPrHOumsclPVjNBplA==", - "salt": "T/2P5o5oxFJUEk68BRURRg==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879354, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "admin", - "managers", - "user", - "IT", - "HR" - ], - "notBefore": 0, - "groups": [] - }, - { - "username": "alice", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "A3okqV2T/ybXTVEgKfosoSjP8Yc9IZbFP/SY4cEd6hag7TABQrQ6nUSuwagGt96l8cw1DTijO75PqX6uiTXMzw==", - "salt": "sl4mXx6T9FypPH/s9TngfQ==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879116, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "user", - "HR" - ], - "notBefore": 0, - "groups": [] - }, - { - "username": "jdoe", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "JV3DUNLjqOadjbBOtC4rvacQI553CGaDGAzBS8MR5ReCr7SwF3E6CsW3T7/XO8ITZAsch8+A/6loeuCoVLLJrg==", - "salt": "uCbOH7HZtyDtMd0E9DG/nw==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879227, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "managers", - "user", - "IT" - ], - "notBefore": 0, - "groups": [] - } - ], - "keycloakVersion": "6.0.0", - "userManagedAccessAllowed": false -} diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/startServices.sh b/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/startServices.sh deleted file mode 100755 index 32eab8d077..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/docker-compose/startServices.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/sh -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - - -echo "Script requires your Kogito Quickstart to be compiled" - -PROJECT_VERSION=$(cd ../ && mvn help:evaluate -Dexpression=project.version -q -DforceStdout) - -echo "Project version: ${PROJECT_VERSION}" - -if [[ $PROJECT_VERSION == *SNAPSHOT ]]; -then - KOGITO_VERSION="latest" -else - KOGITO_VERSION=${PROJECT_VERSION%.*} -fi - -echo "Kogito Image version: ${KOGITO_VERSION}" -echo "KOGITO_VERSION=${KOGITO_VERSION}" > ".env" - -if [ "$(uname)" == "Darwin" ]; then - echo "DOCKER_GATEWAY_HOST=kubernetes.docker.internal" >> ".env" -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - echo "DOCKER_GATEWAY_HOST=172.17.0.1" >> ".env" -fi - -PERSISTENCE_FOLDER=./persistence -KOGITO_EXAMPLE_PERSISTENCE=../target/classes/META-INF/resources/persistence/protobuf - -rm -rf $PERSISTENCE_FOLDER - -mkdir -p $PERSISTENCE_FOLDER - -if [ -d "$KOGITO_EXAMPLE_PERSISTENCE" ] -then - cp $KOGITO_EXAMPLE_PERSISTENCE/*.proto $PERSISTENCE_FOLDER/ -else - echo "$KOGITO_EXAMPLE_PERSISTENCE does not exist. Have you compiled process-usertask-springboot-with-console project?" -# exit 1 -fi - -SVG_FOLDER=./svg - -KOGITO_SVG_FOLDER=../target/classes/META-INF/processSVG - -mkdir -p $SVG_FOLDER - -if [ -d "$KOGITO_SVG_FOLDER" ] -then - cp $KOGITO_SVG_FOLDER/*.svg $SVG_FOLDER -else - echo "$KOGITO_SVG_FOLDER does not exist. Have you compiled process-usertask-springboot-with-console project?" -# exit 1 -fi - -docker-compose up \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/AddTestUsers.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/AddTestUsers.png deleted file mode 100644 index 172b44ce82..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/AddTestUsers.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_details1.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_details1.png deleted file mode 100644 index 52941393e0..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_details1.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_details2.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_details2.png deleted file mode 100644 index dd36c976df..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_details2.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_details3.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_details3.png deleted file mode 100644 index e0aa992480..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_details3.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_list1.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_list1.png deleted file mode 100644 index 494ef9a2a1..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/MC_list1.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_FirstLine.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_FirstLine.png deleted file mode 100644 index 4851653e4c..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_FirstLine.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_SecondLine.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_SecondLine.png deleted file mode 100644 index d1280ba7c3..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_SecondLine.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_list1.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_list1.png deleted file mode 100644 index d18d2f757b..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_list1.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_list2.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_list2.png deleted file mode 100644 index a2e3471521..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/TC_list2.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/diagramProperties.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/diagramProperties.png deleted file mode 100644 index 585c58f583..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/diagramProperties.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/diagramProperties3.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/diagramProperties3.png deleted file mode 100644 index df43a371af..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/diagramProperties3.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/firstLineApprovalUserTask.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/firstLineApprovalUserTask.png deleted file mode 100644 index b705a63b36..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/firstLineApprovalUserTask.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/firstLineApprovalUserTask2.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/firstLineApprovalUserTask2.png deleted file mode 100644 index 65c7dc0846..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/firstLineApprovalUserTask2.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/firstLineApprovalUserTaskAssignments.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/firstLineApprovalUserTaskAssignments.png deleted file mode 100644 index 0bbadf0ac5..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/firstLineApprovalUserTaskAssignments.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/keycloak-login.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/keycloak-login.png deleted file mode 100644 index 58d85f1f43..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/keycloak-login.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/process.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/process.png deleted file mode 100644 index 974dfaebaf..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/process.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/secondLineApprovalUserTask.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/secondLineApprovalUserTask.png deleted file mode 100644 index bd3ce5bcce..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/secondLineApprovalUserTask.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/secondLineApprovalUserTaskAssignments.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/secondLineApprovalUserTaskAssignments.png deleted file mode 100644 index 9ac27a7af0..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/secondLineApprovalUserTaskAssignments.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/services.png b/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/services.png deleted file mode 100644 index c0cc1d4ab8..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-springboot-with-console/docs/images/services.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/pom.xml b/kogito-springboot-examples/process-usertasks-springboot-with-console/pom.xml deleted file mode 100644 index 084ab8db19..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/pom.xml +++ /dev/null @@ -1,164 +0,0 @@ - - - - 4.0.0 - - org.kie.kogito.examples - kogito-springboot-examples - 999-SNAPSHOT - - - process-usertasks-springboot-with-console - Kogito Example :: Process with Usertasks Spring Boot :: Console - Kogito usertasks orchestration - Spring Boot - With Console - - - true - 999-SNAPSHOT - 999-SNAPSHOT - - - - - - org.kie.kogito - kogito-spring-boot-bom - ${kogito.bom.version} - pom - import - - - - - - - org.springframework.boot - spring-boot-starter-actuator - - - - - org.jbpm - jbpm-spring-boot-starter - - - - - org.springframework.boot - spring-boot-starter-test - test - - - io.rest-assured - rest-assured - test - - - org.kie.kogito - kogito-spring-boot-test-utils - ${version.org.kie.kogito} - test - - - - org.kie - kie-addons-springboot-events-process-kafka - - - org.kie - kie-addons-springboot-persistence-infinispan - - - org.infinispan - infinispan-spring-boot3-starter-remote - - - org.kie - kie-addons-springboot-process-svg - - - org.kie - kie-addons-springboot-process-management - - - org.springframework.kafka - spring-kafka - - - - - ${project.artifactId} - - - org.springframework.boot - spring-boot-maven-plugin - ${version.org.springframework.boot} - - - - repackage - - - - - - org.kie.kogito - kogito-maven-plugin - ${version.org.kie.kogito} - true - - - - - - container - - - container - - - - - - com.google.cloud.tools - jib-maven-plugin - - - install - - dockerBuild - - - - - - ${project.groupId}/${project.artifactId}:1.0 - - - - - - - - diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/acme/travels/Address.java b/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/acme/travels/Address.java deleted file mode 100644 index 662dfa9b9f..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/acme/travels/Address.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -public class Address { - - private String street; - private String city; - private String zipCode; - private String country; - - public Address() { - - } - - public Address(String street, String city, String zipCode, String country) { - super(); - this.street = street; - this.city = city; - this.zipCode = zipCode; - this.country = country; - } - - public String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getZipCode() { - return zipCode; - } - - public void setZipCode(String zipCode) { - this.zipCode = zipCode; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - @Override - public String toString() { - return "Address [street=" + street + ", city=" + city + ", zipCode=" + zipCode + ", country=" + country + "]"; - } -} diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/acme/travels/Traveller.java b/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/acme/travels/Traveller.java deleted file mode 100644 index c24685803d..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/acme/travels/Traveller.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -public class Traveller { - - private String firstName; - private String lastName; - private String email; - private String nationality; - private Address address; - - public Traveller() { - - } - - public Traveller(String firstName, String lastName, String email, String nationality, Address address) { - super(); - this.firstName = firstName; - this.lastName = lastName; - this.email = email; - this.nationality = nationality; - this.address = address; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getNationality() { - return nationality; - } - - public void setNationality(String nationality) { - this.nationality = nationality; - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - - @Override - public String toString() { - return "Traveller [firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + ", nationality=" - + nationality + ", address=" + address + "]"; - } - -} diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/kie/kogito/tests/CorsConfig.java b/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/kie/kogito/tests/CorsConfig.java deleted file mode 100644 index a6dc393a64..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/kie/kogito/tests/CorsConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.kie.kogito.tests; - -import java.util.Arrays; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -@Configuration -public class CorsConfig { - - @Bean - public CorsFilter corsFilter() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - - CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.setAllowedOriginPatterns(Arrays.asList("http://*:8080", "http://*:8280", "http://*:8380")); - config.addAllowedHeader("*"); - config.addAllowedMethod("OPTIONS"); - config.addAllowedMethod("GET"); - config.addAllowedMethod("POST"); - config.addAllowedMethod("PUT"); - config.addAllowedMethod("DELETE"); - source.registerCorsConfiguration("/**", - config); - - return new CorsFilter(source); - } -} \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/kie/kogito/tests/KogitoInfinispanSpringbootApplication.java b/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/kie/kogito/tests/KogitoInfinispanSpringbootApplication.java deleted file mode 100644 index fc27bd8647..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/java/org/kie/kogito/tests/KogitoInfinispanSpringbootApplication.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.kie.kogito.tests; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication(scanBasePackages = { "org.kie.kogito.**", "org.acme.travels.**" }) -public class KogitoInfinispanSpringbootApplication { - - public static void main(String[] args) { - SpringApplication.run(KogitoInfinispanSpringbootApplication.class, args); - } - -} diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/META-INF/processSVG/approvals.svg b/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/META-INF/processSVG/approvals.svg deleted file mode 100644 index 1255507f87..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/META-INF/processSVG/approvals.svg +++ /dev/null @@ -1 +0,0 @@ -EndStartProcessSecond Line Approval First Line Approval \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/META-INF/resources/index.html b/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/META-INF/resources/index.html deleted file mode 100644 index c2e78230c5..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/META-INF/resources/index.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - Kogito quickstart - - - - - - - - - - - - - - -
-
-
-
-

Welcome to Kogito

-

- Cloud-native business automation for building intelligent applications, backed by - battle-tested capabilities. -

- - Get Started - - - Latest updates - -
-
-
-
-
-
-
-

Quick Links

- -
-
-
- - - \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/application.properties b/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/application.properties deleted file mode 100644 index 74aed4747e..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/application.properties +++ /dev/null @@ -1,41 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -server.address=0.0.0.0 - -infinispan.remote.server-list=localhost:11222 - -spring.kafka.bootstrap-servers=localhost:9092 - -kogito.service.url=http://localhost:8080 - -#mp.messaging.outgoing.kogito-processinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-processinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-processinstances-events.topic=kogito-processinstances-events -mp.messaging.outgoing.kogito-processinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-usertaskinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-usertaskinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-usertaskinstances-events.topic=kogito-usertaskinstances-events -mp.messaging.outgoing.kogito-usertaskinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-variables-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-variables-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-variables-events.topic=kogito-variables-events -mp.messaging.outgoing.kogito-variables-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/org/acme/travels/approval.bpmn b/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/org/acme/travels/approval.bpmn deleted file mode 100644 index c29d4dbd7e..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/main/resources/org/acme/travels/approval.bpmn +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _9EAFE6C1-69B4-4908-B764-EF3C4A55BEE3 - _C13522F1-230A-4C26-B5A9-533A5D9FEE9D - - - - - - - - - _8B62D3CA-5D03-4B2B-832B-126469288BB4_TaskNameInputX - _8B62D3CA-5D03-4B2B-832B-126469288BB4_travellerInputX - _8B62D3CA-5D03-4B2B-832B-126469288BB4_SkippableInputX - _8B62D3CA-5D03-4B2B-832B-126469288BB4_GroupIdInputX - - - _8B62D3CA-5D03-4B2B-832B-126469288BB4_ActorIdOutputX - _8B62D3CA-5D03-4B2B-832B-126469288BB4_approvedOutputX - - - - _8B62D3CA-5D03-4B2B-832B-126469288BB4_TaskNameInputX - - - - - - - traveller - _8B62D3CA-5D03-4B2B-832B-126469288BB4_travellerInputX - - - _8B62D3CA-5D03-4B2B-832B-126469288BB4_SkippableInputX - - - - - - - _8B62D3CA-5D03-4B2B-832B-126469288BB4_GroupIdInputX - - - - - - - _8B62D3CA-5D03-4B2B-832B-126469288BB4_ActorIdOutputX - approver - - - _8B62D3CA-5D03-4B2B-832B-126469288BB4_approvedOutputX - firstLineApproval - - - - jdoe - - - - - - - - - - _C13522F1-230A-4C26-B5A9-533A5D9FEE9D - _078F46FB-B7A1-4DBB-BE9A-75C7CB0CCD03 - - - - - - - - - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_TaskNameInputX - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_ExcludedOwnerIdInputX - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_travellerInputX - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_SkippableInputX - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_GroupIdInputX - - - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_approvedOutputX - - - - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_TaskNameInputX - - - - - - - approver - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_ExcludedOwnerIdInputX - - - traveller - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_travellerInputX - - - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_SkippableInputX - - - - - - - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_GroupIdInputX - - - - - - - _0DBFABE8-92B0-46E6-B52E-A9593AFA4371_approvedOutputX - secondLineApproval - - - - jdoe - - - - - - - - - - _9EAFE6C1-69B4-4908-B764-EF3C4A55BEE3 - - - - - - - - _078F46FB-B7A1-4DBB-BE9A-75C7CB0CCD03 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _0bOh4MK_EDmzKdx9QxiR4Q - _0bOh4MK_EDmzKdx9QxiR4Q - - \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/test/java/org/acme/travels/ApprovalsTestIT.java b/kogito-springboot-examples/process-usertasks-springboot-with-console/src/test/java/org/acme/travels/ApprovalsTestIT.java deleted file mode 100644 index f941385cfa..0000000000 --- a/kogito-springboot-examples/process-usertasks-springboot-with-console/src/test/java/org/acme/travels/ApprovalsTestIT.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.jbpm.process.instance.impl.humantask.HumanTaskTransition; -import org.jbpm.process.instance.impl.humantask.phases.Claim; -import org.jbpm.process.instance.impl.workitem.Complete; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.kie.kogito.Model; -import org.kie.kogito.auth.IdentityProviders; -import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.process.Process; -import org.kie.kogito.process.ProcessInstance; -import org.kie.kogito.process.WorkItem; -import org.kie.kogito.testcontainers.springboot.InfinispanSpringBootTestResource; -import org.kie.kogito.tests.KogitoInfinispanSpringbootApplication; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@ExtendWith(SpringExtension.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = KogitoInfinispanSpringbootApplication.class) -@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) // reset spring context after each test method -@ContextConfiguration(initializers = { InfinispanSpringBootTestResource.Conditional.class }) -public class ApprovalsTestIT { - - @Autowired - @Qualifier("approvals") - Process approvalsProcess; - - @Test - public void testApprovalProcess() { - - assertNotNull(approvalsProcess); - - Model m = approvalsProcess.createModel(); - Map parameters = new HashMap<>(); - parameters.put("traveller", new Traveller("John", "Doe", "john.doe@example.com", "American", new Address("main street", "Boston", "10005", "US"))); - m.fromMap(parameters); - - ProcessInstance processInstance = approvalsProcess.createInstance(m); - processInstance.start(); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("managers"))); - - processInstance.workItems(policy); - - List workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - Map results = new HashMap<>(); - results.put("approved", true); - processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - - workItems = processInstance.workItems(policy); - assertEquals(0, workItems.size()); - - policy = SecurityPolicy.of(IdentityProviders.of("john", Collections.singletonList("managers"))); - - processInstance.workItems(policy); - - workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - - results.put("approved", false); - processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); - - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); - } - - @Test - public void testApprovalProcessViaPhases() { - - assertNotNull(approvalsProcess); - - Model m = approvalsProcess.createModel(); - Map parameters = new HashMap<>(); - parameters.put("traveller", new Traveller("John", "Doe", "john.doe@example.com", "American", new Address("main street", "Boston", "10005", "US"))); - m.fromMap(parameters); - - ProcessInstance processInstance = approvalsProcess.createInstance(m); - processInstance.start(); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Collections.singletonList("managers"))); - - processInstance.workItems(policy); - - List workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Claim.ID, null, policy)); - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Complete.ID, Collections.singletonMap("approved", true), policy)); - - workItems = processInstance.workItems(policy); - assertEquals(0, workItems.size()); - - policy = SecurityPolicy.of(IdentityProviders.of("john", Collections.singletonList("managers"))); - - processInstance.workItems(policy); - - workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Claim.ID, null, policy)); - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Complete.ID, Collections.singletonMap("approved", false), policy)); - - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); - - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); - } -} diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/README.md b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/README.md deleted file mode 100644 index eb0b992182..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/README.md +++ /dev/null @@ -1,253 +0,0 @@ -# Process user task orchestration - -## Description - -A quickstart project shows very typical user task orchestration. It comes with two tasks assigned -to human actors via group assignments - `managers`. So essentially anyone who is a member of that -group can act on the tasks. Though this example applies four eye principles which essentially means -that the user who approved the first task cannot approve the second one. So there must always be at -least two distinct managers involved. - -This example shows - -* working with user tasks -* four eye principle with user tasks -* Task console to execute human task -* Management console tracking process execution - - -

- - -## Build and run - -### Prerequisites - -You will need: - - Java 11+ installed - - Environment variable JAVA_HOME set accordingly - - Maven 3.8.6+ installed - - [jq](https://stedolan.github.io/jq) tool installed. You can download it from [here](https://stedolan.github.io/jq/download) - - Docker and Docker Compose to run the required example infrastructure. - -### Starting the Kogito and Infrastructure Services - -This quickstart provides a docker compose template that starts all the required services. This setup ensures that all services are connected with a default configuration. - -

- -You should start all the services before you execute any of the **Approvals** example, to do that please execute: - -For Linux and MacOS: - -1. Open a Terminal -2. Go to the process-usertasks-with-security-oidc-springboot-with-console folder at kogito-examples -3. Run the ```startServices.sh``` script - -```bash -sh ./startServices.sh -``` - -Once all services bootstrap, the following ports will be assigned on your local machine: - -- Infinispan: 11222 -- Kafka: 9092 -- Data Index: 8180 -- Management Console: 8280 -- Task Console: 8380 -- Keycloak server: 8480 -- process-usertasks-with-security-oidc-springboot-with-console: 8080 - -> **_NOTE:_** This step requires the project to be compiled, please consider running a ```mvn clean install -Pcontainer``` command on the project root before running the ```startServices.sh``` script for the first time or any time you modify the project. ```-Pcontainer``` will create a local docker image of the example and will be run by docker-compose with all required services. - -Once started you can simply stop all services by executing the ```docker-compose stop```. - -All the created containers can be removed by executing the ```docker-compose rm```. - -### Using Keycloak as Authentication Server - -In this Quickstart we'll be using [Keycloak](https://www.keycloak.org/) as *Authentication Server*. It will be started as a part of the project *Infrastructure Services*, you can check the configuration on the project [docker-compose.yml](docker-compose/docker-compose.yml) in [docker-compose](docker-compose) folder. - -It will install the *Kogito Realm* that comes with a predefined set of users: -| Login | Password | Roles | -| ------------- | ---------- | ------------------- | -| admin | admin | *admin*, *managers* | -| alice | alice | *user* | -| jdoe | jdoe | *managers* | - -Once Keycloak is started, you should be able to access your *Keycloak Server* at [localhost:8480/auth](http://localhost:8480/auth) with *admin* user. - -### Security using OpenID Connect - -This Quickstart is taking advantage of the Quarkus OIDC extension that allows an easy integration between the *Kogito* runtime, *Kogito* consoles and *Keycloak*. - -This example enables authentication *Kogito Management Console* & *Kogito Task Console* using OpenID Connect, -to do that you must start the consoles using the *keycloak* quarkus profile as a parameter (`-Dquarkus.profile=keycloak`). You can check the configuration on the project [docker-compose.yml](docker-compose/docker-compose.yml) in [docker-compose](docker-compose) folder. - -> **_NOTE:_** For more information about how to secure Kogito Management Console with OpenID Connect, please refer to [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#proc-management-console-security_kogito-developing-process-services). -> -> For more information about how to secure Kogito Task Console with OpenID Connect, please refer to [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#proc-task-console-security_kogito-developing-process-services) - -> **_NOTE:_** If you don't want to run the example inside docker compose. You can stop the service container by running below commands. - - docker stop process-usertasks-with-security-oidc-springboot-with-console - -### Compile and Run in Local Dev Mode - -```sh -mvn clean compile spring-boot:run -``` - -### Package and Run using uberjar - -```sh -mvn clean package -``` - -To run the generated native executable, generated in `target/`, execute - -```sh -java -jar target/process-usertasks-with-security-oidc-springboot-with-console.jar -``` - -We can navigate to [http://localhost:8080](http://localhost:8080) to verify the Kogito runtime is running - -### OpenAPI (Swagger) documentation -[Specification at swagger.io](https://swagger.io/docs/specification/about/) - -You can take a look at the [OpenAPI definition](http://localhost:8080/v3/api-docs) - automatically generated and included in this service - to determine all available operations exposed by this service. For easy readability you can visualize the OpenAPI definition file using a UI tool like for example available [Swagger UI](https://editor.swagger.io). - -In addition, various clients to interact with this service can be easily generated using this OpenAPI definition. -We can access to deployed [http://localhost:8080/swagger-ui](http://localhost:8080/swagger-ui.html) even the current example has the security enabled and some endpoint will require authenication. - -### Submit a request to start new approval -The application is using bearer token authorization and the first thing to do is obtain an access token from the Keycloak -Server in order to access the application resources. Obtain an access token for user john. - -```sh -export access_token=$(\ - curl -X POST http://localhost:8480/auth/realms/kogito/protocol/openid-connect/token \ - --user kogito-app:secret \ - -H 'content-type: application/x-www-form-urlencoded' \ - -d 'username=jdoe&password=jdoe&grant_type=password' | jq --raw-output '.access_token' \ - ) -``` - -To make use of this application it is as simple as putting a sending request to `http://localhost:8080/approvals` - -```json -{ -"traveller" : { - "firstName" : "John", - "lastName" : "Doe", - "email" : "jon.doe@example.com", - "nationality" : "American", - "address" : { - "street" : "main street", - "city" : "Boston", - "zipCode" : "10005", - "country" : "US" } - } -} - -``` - -Complete curl command can be found below, passing the token as Authorization header : - -```sh -curl -X POST -H "Authorization: Bearer "$access_token -H 'Content-Type:application/json' -H 'Accept:application/json' -d '{"traveller" : { "firstName" : "John", "lastName" : "Doe", "email" : "jon.doe@example.com", "nationality" : "American","address" : { "street" : "main street", "city" : "Boston", "zipCode" : "10005", "country" : "US" }}}' http://localhost:8080/approvals -``` - - -### Kogito Management Console - -To access the Kogito Management Console just open your browser and navigate to ``http://localhost:8280``. You'll be redirected to the *Keycloak* log in page. - -

- -

- -Once there, log in using any of the users specified in the [Using Keycloak as Authentication Server](#using-keycloak-as-authentication-server) - -

- -

- -> **_NOTE:_** For more information about how to work with Kogito Management Console, please refer to the [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#con-management-console_kogito-developing-process-services) page. - -### Kogito Task Console - -To access the Kogito Task Console just open your browser and navigate to ``http://localhost:8380``. You'll be redirected to the *Keycloak* log in page. - -

- -

- -Once there, log in with an *managers* user (for example *admin*) and you should be redirected to the user **Task Inbox**: - -

- -

- -There you'll see all the tasks assigned to the user or to any of the group he belongs to. - - -### Show active process instances at Kogito Management Console - -To access the Kogito Management Console just open your browser and navigate to ``http://localhost:8280``. - -

- -

- -> **_NOTE:_** For more information about how to work with Kogito Management Console, please refer to the [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#con-management-console_kogito-developing-process-services) page. - -Check the process instance details to see where is the execution path - -

- -

- -### Execute 'First Line approval' task at Kogito Task Console - -To access the Kogito Task Console just open your browser and navigate to ``http://localhost:8380`` and you should be redirected to the **Task Inbox**. -Ensure you are logged as a user with role manager to be able to see the First Line approval (i.e: jdoe / jdoe) - -

- -

- -> **_NOTE:_** For more information about how to work with Kogito Task Console, please refer to the [Kogito Documentation](https://docs.jboss.org/kogito/release/latest/html_single/#con-task-console_kogito-developing-process-services) page. - -Access to 'First Line approval' task and complete - -

- -

- -Check the process instance details at Kogito Management Console to see the execution path reflects the completed task - -

- -

- -### Execute 'Second Line approval' task at Kogito Task Console - -Access the Kogito Task Console and ensure you are logged as a user with role manager to be able to see the Second Line approval -following the second eye principle (i.e: admin / admin) - -

- -

- -Access to 'Second Line approval' task and complete - -

- -

- -Check the process instance details at Kogito Management Console, and verify the execution path is reflected in the diagram. - -

- -

diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/.gitignore b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/.gitignore deleted file mode 100644 index b6632dbda5..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -.env -svg/ -persistence/ \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/README.md b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/README.md deleted file mode 100644 index 4a3db21aa6..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/README.md +++ /dev/null @@ -1,59 +0,0 @@ -## Kogito and Infrastructure services - -To allow a quick setup of all services required to run this demo, we provide a docker compose template that starts the following services: -- Infinispan -- Kafka -- Keycloak -- Kogito Data Index -- Kogito Management Console -- Kogito Task Console - -This setup ensures that all services are connected using the default configuration as well as provisioning the Travel Agency dashboard to Grafana. - -In order to use it, please ensure you have Docker Compose installed on your machine, otherwise follow the instructions available - in [here](https://docs.docker.com/compose/install/). - -### Starting required services - - Before you execute the **Approvals** example, start all the services by following these steps: - - For Linux and MacOS: - - ./startServices.sh - - For Windows: - - Create a .env file with the content containing the version of the Kogito images you would like to run, example: - - KOGITO_VERSION=1.0.0 - - Then run - - docker-compose up - - Once all services bootstrap, the following ports will be assigned on your local machine: - - Infinispan: 11222 - - Kafka: 9092 - - Keycloak: 8480 - - Data Index: 8180 - - Management Console: 8280 - - Task Console: 8380 - - process-usertasks-with-security-oidc-springboot-with-console: 8080 - -> **_NOTE:_** If you don't want to run the example inside docker compose. You can stop the container by running below commands. - - docker stop process-usertasks-with-security-oidc-springboot-with-console - -### Stopping and removing volume data - - To stop all services, simply run: - - docker-compose stop - - It is also recommended to remove any of stopped containers by running: - - docker-compose rm - - For more details please check the Docker Compose documentation. - - docker-compose --help diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/docker-compose.yml b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/docker-compose.yml deleted file mode 100755 index d8b3c02a4c..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/docker-compose.yml +++ /dev/null @@ -1,136 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -version: '2.1' - -services: - - infinispan: - image: infinispan/server:14.0.4.Final - container_name: infinispan - ports: - - "11222:11222" - command: "-c infinispan-demo.xml" - volumes: - - ./infinispan/infinispan.xml:/opt/infinispan/server/conf/infinispan-demo.xml:z - healthcheck: - test: [ "CMD", "curl", "-f", "http://localhost:11222/rest/v2/cache-managers/default/health/status" ] - interval: 1s - timeout: 30s - retries: 50 - - zookeeper: - container_name: zookeeper - image: strimzi/kafka:0.20.1-kafka-2.6.0 - command: [ - "sh", "-c", - "bin/zookeeper-server-start.sh config/zookeeper.properties" - ] - ports: - - "2181:2181" - environment: - LOG_DIR: "/tmp/logs" - - kafka: - image: strimzi/kafka:0.20.1-kafka-2.6.0 - container_name: kafka - command: [ - "sh", "-c", - "bin/kafka-server-start.sh config/server.properties --override inter.broker.listener.name=$${KAFKA_INTER_BROKER_LISTENER_NAME} --override listener.security.protocol.map=$${KAFKA_LISTENER_SECURITY_PROTOCOL_MAP} --override listeners=$${KAFKA_LISTENERS} --override advertised.listeners=$${KAFKA_ADVERTISED_LISTENERS} --override zookeeper.connect=$${KAFKA_ZOOKEEPER_CONNECT}" - ] - depends_on: - - zookeeper - ports: - - "9092:9092" - environment: - KAFKA_BROKER_ID: 0 - KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 - KAFKA_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://kafka:9092 - KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:29092,EXTERNAL://localhost:9092 - KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT - KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL - KAFKA_AUTO_CREATE_TOPICS_ENABLE: "true" - KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 - LOG_DIR: "/tmp/logs" - - keycloak: - container_name: keycloak - image: quay.io/keycloak/keycloak:legacy - ports: - - "8480:8080" - volumes: - - ./keycloak/kogito-realm.json:/tmp/kogito-realm.json - healthcheck: - test: [ "CMD", "curl", "-f", "http://localhost:8080/auth/realms/kogito" ] - interval: 1s - timeout: 1s - retries: 50 - environment: - KEYCLOAK_USER: admin - KEYCLOAK_PASSWORD: admin - KEYCLOAK_IMPORT: /tmp/kogito-realm.json - - data-index: - container_name: data-index - image: quay.io/kiegroup/kogito-data-index-infinispan:${KOGITO_VERSION} - ports: - - "8180:8080" - depends_on: - kafka: - condition: service_started - infinispan: - condition: service_healthy - volumes: - - ./persistence/:/home/kogito/data/protobufs/ - environment: - QUARKUS_HTTP_CORS_ORIGINS: "/.*/" - QUARKUS_INFINISPAN_CLIENT_HOSTS: infinispan:11222 - QUARKUS_INFINISPAN_CLIENT_USE_AUTH: "false" - KAFKA_BOOTSTRAP_SERVERS: kafka:29092 - KOGITO_DATA_INDEX_PROPS: -Dkogito.protobuf.folder=/home/kogito/data/protobufs/ - - management-console: - container_name: management-console - image: quay.io/kiegroup/kogito-management-console:${KOGITO_VERSION} - ports: - - 8280:8080 - depends_on: - data-index: - condition: service_started - keycloak: - condition: service_healthy - volumes: - - ./svg/:/home/kogito/data/svg/ - environment: - KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql - KOGITO_MANAGEMENT_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8480/auth -Dkogito.consoles.keycloak.config.health-check-url=http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8480/auth/realms/kogito/.well-known/openid-configuration -Dkogito.svg.folder.path=/home/kogito/data/svg - - task-console: - container_name: task-console - image: quay.io/kiegroup/kogito-task-console:${KOGITO_VERSION} - ports: - - 8380:8080 - depends_on: - data-index: - condition: service_started - keycloak: - condition: service_healthy - environment: - KOGITO_DATAINDEX_HTTP_URL: http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8180/graphql - KOGITO_TASK_CONSOLE_PROPS: -Dkogito.consoles.keycloak.config.url=http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8480/auth -Dkogito.consoles.keycloak.config.health-check-url=http://${DOCKER_GATEWAY_HOST:-host.docker.internal}:8480/auth/realms/kogito/.well-known/openid-configuration diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/infinispan/infinispan.xml b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/infinispan/infinispan.xml deleted file mode 100755 index a466561b9f..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/infinispan/infinispan.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/keycloak/kogito-realm.json b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/keycloak/kogito-realm.json deleted file mode 100644 index a8d3080456..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/keycloak/kogito-realm.json +++ /dev/null @@ -1,2288 +0,0 @@ -{ - "realm": "kogito", - "notBefore": 0, - "revokeRefreshToken": false, - "refreshTokenMaxReuse": 0, - "accessTokenLifespan": 300, - "accessTokenLifespanForImplicitFlow": 900, - "ssoSessionIdleTimeout": 1800, - "ssoSessionMaxLifespan": 36000, - "ssoSessionIdleTimeoutRememberMe": 0, - "ssoSessionMaxLifespanRememberMe": 0, - "offlineSessionIdleTimeout": 2592000, - "offlineSessionMaxLifespanEnabled": false, - "offlineSessionMaxLifespan": 5184000, - "accessCodeLifespan": 60, - "accessCodeLifespanUserAction": 300, - "accessCodeLifespanLogin": 1800, - "actionTokenGeneratedByAdminLifespan": 43200, - "actionTokenGeneratedByUserLifespan": 300, - "enabled": true, - "sslRequired": "external", - "registrationAllowed": false, - "registrationEmailAsUsername": false, - "rememberMe": false, - "verifyEmail": false, - "loginWithEmailAllowed": true, - "duplicateEmailsAllowed": false, - "resetPasswordAllowed": false, - "editUsernameAllowed": false, - "bruteForceProtected": false, - "permanentLockout": false, - "maxFailureWaitSeconds": 900, - "minimumQuickLoginWaitSeconds": 60, - "waitIncrementSeconds": 60, - "quickLoginCheckMilliSeconds": 1000, - "maxDeltaTimeSeconds": 43200, - "failureFactor": 30, - "roles": { - "realm": [ - { - "name": "managers", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "uma_authorization", - "description": "${role_uma_authorization}", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "admin", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "user", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "HR", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "IT", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - }, - { - "name": "offline_access", - "description": "${role_offline-access}", - "composite": false, - "clientRole": false, - "containerId": "11d78bf6-6d10-4484-baba-a1388379d68b", - "attributes": {} - } - ], - "client": { - "realm-management": [ - { - "name": "manage-identity-providers", - "description": "${role_manage-identity-providers}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "impersonation", - "description": "${role_impersonation}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-identity-providers", - "description": "${role_view-identity-providers}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-realm", - "description": "${role_view-realm}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-users", - "description": "${role_query-users}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-clients", - "description": "${role_manage-clients}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-events", - "description": "${role_manage-events}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "realm-admin", - "description": "${role_realm-admin}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "impersonation", - "manage-identity-providers", - "view-identity-providers", - "view-realm", - "query-users", - "manage-clients", - "manage-events", - "manage-realm", - "view-authorization", - "manage-authorization", - "view-users", - "create-client", - "query-clients", - "query-groups", - "manage-users", - "view-clients", - "view-events", - "query-realms" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-realm", - "description": "${role_manage-realm}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-authorization", - "description": "${role_view-authorization}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-authorization", - "description": "${role_manage-authorization}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "create-client", - "description": "${role_create-client}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-users", - "description": "${role_view-users}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "query-groups", - "query-users" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-clients", - "description": "${role_query-clients}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-groups", - "description": "${role_query-groups}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "manage-users", - "description": "${role_manage-users}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-clients", - "description": "${role_view-clients}", - "composite": true, - "composites": { - "client": { - "realm-management": [ - "query-clients" - ] - } - }, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "view-events", - "description": "${role_view-events}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - }, - { - "name": "query-realms", - "description": "${role_query-realms}", - "composite": false, - "clientRole": true, - "containerId": "376bd940-e50a-4495-80fc-9c6c07312748", - "attributes": {} - } - ], - "security-admin-console": [], - "admin-cli": [], - "kogito-service": [ - { - "name": "uma_protection", - "composite": false, - "clientRole": true, - "containerId": "0ac5df91-e044-4051-bd03-106a3a5fb9cc", - "attributes": {} - } - ], - "broker": [ - { - "name": "read-token", - "description": "${role_read-token}", - "composite": false, - "clientRole": true, - "containerId": "53d4fe53-a039-471e-886a-28eddc950e95", - "attributes": {} - } - ], - "account": [ - { - "name": "view-profile", - "description": "${role_view-profile}", - "composite": false, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - }, - { - "name": "manage-account", - "description": "${role_manage-account}", - "composite": true, - "composites": { - "client": { - "account": [ - "manage-account-links" - ] - } - }, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - }, - { - "name": "manage-account-links", - "description": "${role_manage-account-links}", - "composite": false, - "clientRole": true, - "containerId": "e55e1234-38fa-432d-8d90-39f5e024688d", - "attributes": {} - } - ] - } - }, - "groups": [], - "defaultRoles": [ - "uma_authorization", - "offline_access" - ], - "requiredCredentials": [ - "password" - ], - "otpPolicyType": "totp", - "otpPolicyAlgorithm": "HmacSHA1", - "otpPolicyInitialCounter": 0, - "otpPolicyDigits": 6, - "otpPolicyLookAheadWindow": 1, - "otpPolicyPeriod": 30, - "otpSupportedApplications": [ - "FreeOTP", - "Google Authenticator" - ], - "scopeMappings": [ - { - "clientScope": "offline_access", - "roles": [ - "offline_access" - ] - } - ], - "clients": [ - { - "clientId": "account", - "name": "${client_account}", - "baseUrl": "/auth/realms/kogito/account", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "0136c3ef-0dfd-4b13-a6d0-2c8b6358edec", - "defaultRoles": [ - "view-profile", - "manage-account" - ], - "redirectUris": [ - "/auth/realms/kogito/account/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "admin-cli", - "name": "${client_admin-cli}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "a951803a-79c7-46a6-8197-e32835286971", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": false, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "broker", - "name": "${client_broker}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "e1f7edd7-e15c-43b4-8736-ff8204d16836", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-frontend", - "rootUrl": "http://localhost:8082", - "adminUrl": "http://localhost:8082", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8082/*" - ], - "webOrigins": [ - "http://localhost:8082" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "kogito-app", - "rootUrl": "http://localhost:8080", - "adminUrl": "http://localhost:8080", - "surrogateAuthRequired": false, - "enabled": true, - "alwaysDisplayInConsole": false, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8080/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": true, - "authorizationServicesEnabled": true, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "backchannel.logout.revoke.offline.tokens": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "backchannel.logout.session.required": "false", - "client_credentials.use_refresh_token": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "name": "Client ID", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientId", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientId", - "jsonType.label": "String" - } - }, - { - "name": "Client IP Address", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientAddress", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientAddress", - "jsonType.label": "String" - } - }, - { - "name": "Client Host", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientHost", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientHost", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "kogito-service", - "rootUrl": "", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": true, - "authorizationServicesEnabled": true, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "name": "Client ID", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientId", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientId", - "jsonType.label": "String" - } - }, - { - "name": "Client IP Address", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientAddress", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientAddress", - "jsonType.label": "String" - } - }, - { - "name": "Client Host", - "protocol": "openid-connect", - "protocolMapper": "oidc-usersessionmodel-note-mapper", - "consentRequired": false, - "config": { - "user.session.note": "clientHost", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "clientHost", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "authorizationSettings": { - "allowRemoteResourceManagement": true, - "policyEnforcementMode": "ENFORCING", - "resources": [ - { - "name": "User Resource", - "ownerManagedAccess": false, - "attributes": {}, - "_id": "df1b74a9-3f10-499d-a581-368de48e512b", - "uris": [ - "/api/users/*" - ] - }, - { - "name": "Administration Resource", - "ownerManagedAccess": false, - "attributes": {}, - "_id": "7124e2f1-e6dc-44b4-87ab-24b010090b97", - "uris": [ - "/api/admin/*" - ] - } - ], - "policies": [ - { - "name": "Any User Policy", - "description": "Any user granted with the user role can access something", - "type": "role", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "roles": "[{\"id\":\"user\",\"required\":false}]" - } - }, - { - "name": "Only Administrators", - "description": "Only administrators can access", - "type": "role", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "roles": "[{\"id\":\"admin\",\"required\":false}]" - } - }, - { - "name": "User Resource Permission", - "type": "resource", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "resources": "[\"User Resource\"]", - "applyPolicies": "[\"Any User Policy\"]" - } - }, - { - "name": "Administration Resource Permission", - "type": "resource", - "logic": "POSITIVE", - "decisionStrategy": "UNANIMOUS", - "config": { - "resources": "[\"Administration Resource\"]", - "applyPolicies": "[\"Only Administrators\"]" - } - } - ], - "scopes": [], - "decisionStrategy": "UNANIMOUS" - } - }, - { - "clientId": "kogito-console-react", - "rootUrl": "http://localhost:9000", - "adminUrl": "http://localhost:9000/", - "baseUrl": "http://localhost:9000/", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "http://localhost:9000/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-console-quarkus", - "rootUrl": "http://localhost:8380", - "adminUrl": "http://localhost:8380/", - "baseUrl": "http://localhost:8380/", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "**********", - "redirectUris": [ - "http://localhost:8380/*", - "http://localhost:8280/*" - ], - "webOrigins": [ - "*" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "protocolMappers": [ - { - "name": "groups", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "user.attribute": "foo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "groups", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "kogito-jobs-service", - "rootUrl": "http://localhost:8080", - "adminUrl": "http://localhost:8080", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "secret", - "redirectUris": [ - "http://localhost:8080/*" - ], - "webOrigins": [ - "http://localhost:8080" - ], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": true, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": { - "saml.assertion.signature": "false", - "saml.force.post.binding": "false", - "saml.multivalued.roles": "false", - "saml.encrypt": "false", - "saml.server.signature": "false", - "saml.server.signature.keyinfo.ext": "false", - "exclude.session.state.from.auth.response": "false", - "saml_force_name_id_format": "false", - "saml.client.signature": "false", - "tls.client.certificate.bound.access.tokens": "false", - "saml.authnstatement": "false", - "display.on.consent.screen": "false", - "saml.onetimeuse.condition": "false" - }, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": true, - "nodeReRegistrationTimeout": -1, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ], - "access": { - "view": true, - "configure": true, - "manage": true - } - }, - { - "clientId": "realm-management", - "name": "${client_realm-management}", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "c41b709a-a012-4c69-89d7-4f926dba0619", - "redirectUris": [], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": true, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": false, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - }, - { - "clientId": "security-admin-console", - "name": "${client_security-admin-console}", - "baseUrl": "/auth/admin/kogito/console/index.html", - "surrogateAuthRequired": false, - "enabled": true, - "clientAuthenticatorType": "client-secret", - "secret": "e571b211-2550-475d-b87f-116ff54091ee", - "redirectUris": [ - "/auth/admin/kogito/console/*" - ], - "webOrigins": [], - "notBefore": 0, - "bearerOnly": false, - "consentRequired": false, - "standardFlowEnabled": true, - "implicitFlowEnabled": false, - "directAccessGrantsEnabled": false, - "serviceAccountsEnabled": false, - "publicClient": true, - "frontchannelLogout": false, - "protocol": "openid-connect", - "attributes": {}, - "authenticationFlowBindingOverrides": {}, - "fullScopeAllowed": false, - "nodeReRegistrationTimeout": 0, - "protocolMappers": [ - { - "name": "locale", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "locale", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "locale", - "jsonType.label": "String" - } - } - ], - "defaultClientScopes": [ - "web-origins", - "role_list", - "profile", - "roles", - "email" - ], - "optionalClientScopes": [ - "address", - "phone", - "offline_access", - "microprofile-jwt" - ] - } - ], - "clientScopes": [ - { - "name": "address", - "description": "OpenID Connect built-in scope: address", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${addressScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "address", - "protocol": "openid-connect", - "protocolMapper": "oidc-address-mapper", - "consentRequired": false, - "config": { - "user.attribute.formatted": "formatted", - "user.attribute.country": "country", - "user.attribute.postal_code": "postal_code", - "userinfo.token.claim": "true", - "user.attribute.street": "street", - "id.token.claim": "true", - "user.attribute.region": "region", - "access.token.claim": "true", - "user.attribute.locality": "locality" - } - } - ] - }, - { - "name": "email", - "description": "OpenID Connect built-in scope: email", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${emailScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "email", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "email", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "email", - "jsonType.label": "String" - } - }, - { - "name": "email verified", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "emailVerified", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "email_verified", - "jsonType.label": "boolean" - } - } - ] - }, - { - "name": "microprofile-jwt", - "description": "Microprofile - JWT built-in scope", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "false" - }, - "protocolMappers": [ - { - "name": "upn", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "username", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "upn", - "jsonType.label": "String" - } - }, - { - "name": "groups", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "multivalued": "true", - "user.attribute": "foo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "groups", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "offline_access", - "description": "OpenID Connect built-in scope: offline_access", - "protocol": "openid-connect", - "attributes": { - "consent.screen.text": "${offlineAccessScopeConsentText}", - "display.on.consent.screen": "true" - } - }, - { - "name": "phone", - "description": "OpenID Connect built-in scope: phone", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${phoneScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "phone number verified", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "phoneNumberVerified", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "phone_number_verified", - "jsonType.label": "boolean" - } - }, - { - "name": "phone number", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "phoneNumber", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "phone_number", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "profile", - "description": "OpenID Connect built-in scope: profile", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "true", - "display.on.consent.screen": "true", - "consent.screen.text": "${profileScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "nickname", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "nickname", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "nickname", - "jsonType.label": "String" - } - }, - { - "name": "zoneinfo", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "zoneinfo", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "zoneinfo", - "jsonType.label": "String" - } - }, - { - "name": "updated at", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "updatedAt", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "updated_at", - "jsonType.label": "String" - } - }, - { - "name": "birthdate", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "birthdate", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "birthdate", - "jsonType.label": "String" - } - }, - { - "name": "given name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "firstName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "given_name", - "jsonType.label": "String" - } - }, - { - "name": "full name", - "protocol": "openid-connect", - "protocolMapper": "oidc-full-name-mapper", - "consentRequired": false, - "config": { - "id.token.claim": "true", - "access.token.claim": "true", - "userinfo.token.claim": "true" - } - }, - { - "name": "middle name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "middleName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "middle_name", - "jsonType.label": "String" - } - }, - { - "name": "username", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "username", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "preferred_username", - "jsonType.label": "String" - } - }, - { - "name": "family name", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-property-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "lastName", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "family_name", - "jsonType.label": "String" - } - }, - { - "name": "gender", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "gender", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "gender", - "jsonType.label": "String" - } - }, - { - "name": "picture", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "picture", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "picture", - "jsonType.label": "String" - } - }, - { - "name": "locale", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "locale", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "locale", - "jsonType.label": "String" - } - }, - { - "name": "profile", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "profile", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "profile", - "jsonType.label": "String" - } - }, - { - "name": "website", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-attribute-mapper", - "consentRequired": false, - "config": { - "userinfo.token.claim": "true", - "user.attribute": "website", - "id.token.claim": "true", - "access.token.claim": "true", - "claim.name": "website", - "jsonType.label": "String" - } - } - ] - }, - { - "name": "role_list", - "description": "SAML role list", - "protocol": "saml", - "attributes": { - "consent.screen.text": "${samlRoleListScopeConsentText}", - "display.on.consent.screen": "true" - }, - "protocolMappers": [ - { - "name": "role list", - "protocol": "saml", - "protocolMapper": "saml-role-list-mapper", - "consentRequired": false, - "config": { - "single": "false", - "attribute.nameformat": "Basic", - "attribute.name": "Role" - } - } - ] - }, - { - "name": "roles", - "description": "OpenID Connect scope for add user roles to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "false", - "display.on.consent.screen": "true", - "consent.screen.text": "${rolesScopeConsentText}" - }, - "protocolMappers": [ - { - "name": "realm roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-realm-role-mapper", - "consentRequired": false, - "config": { - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "realm_access.roles", - "jsonType.label": "String", - "multivalued": "true" - } - }, - { - "name": "audience resolve", - "protocol": "openid-connect", - "protocolMapper": "oidc-audience-resolve-mapper", - "consentRequired": false, - "config": {} - }, - { - "name": "client roles", - "protocol": "openid-connect", - "protocolMapper": "oidc-usermodel-client-role-mapper", - "consentRequired": false, - "config": { - "user.attribute": "foo", - "access.token.claim": "true", - "claim.name": "resource_access.${client_id}.roles", - "jsonType.label": "String", - "multivalued": "true" - } - } - ] - }, - { - "name": "web-origins", - "description": "OpenID Connect scope for add allowed web origins to the access token", - "protocol": "openid-connect", - "attributes": { - "include.in.token.scope": "false", - "display.on.consent.screen": "false", - "consent.screen.text": "" - }, - "protocolMappers": [ - { - "name": "allowed web origins", - "protocol": "openid-connect", - "protocolMapper": "oidc-allowed-origins-mapper", - "consentRequired": false, - "config": {} - } - ] - } - ], - "defaultDefaultClientScopes": [ - "role_list", - "profile", - "email", - "roles", - "web-origins" - ], - "defaultOptionalClientScopes": [ - "offline_access", - "address", - "phone", - "microprofile-jwt" - ], - "browserSecurityHeaders": { - "contentSecurityPolicyReportOnly": "", - "xContentTypeOptions": "nosniff", - "xRobotsTag": "none", - "xFrameOptions": "SAMEORIGIN", - "xXSSProtection": "1; mode=block", - "contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", - "strictTransportSecurity": "max-age=31536000; includeSubDomains" - }, - "smtpServer": {}, - "eventsEnabled": false, - "eventsListeners": [ - "jboss-logging" - ], - "enabledEventTypes": [], - "adminEventsEnabled": false, - "adminEventsDetailsEnabled": false, - "components": { - "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy": [ - { - "name": "Allowed Protocol Mapper Types", - "providerId": "allowed-protocol-mappers", - "subType": "anonymous", - "subComponents": {}, - "config": { - "allowed-protocol-mapper-types": [ - "oidc-full-name-mapper", - "saml-user-attribute-mapper", - "saml-user-property-mapper", - "oidc-address-mapper", - "saml-role-list-mapper", - "oidc-sha256-pairwise-sub-mapper", - "oidc-usermodel-attribute-mapper", - "oidc-usermodel-property-mapper" - ] - } - }, - { - "name": "Allowed Client Scopes", - "providerId": "allowed-client-templates", - "subType": "authenticated", - "subComponents": {}, - "config": { - "allow-default-scopes": [ - "true" - ] - } - }, - { - "name": "Allowed Client Scopes", - "providerId": "allowed-client-templates", - "subType": "anonymous", - "subComponents": {}, - "config": { - "allow-default-scopes": [ - "true" - ] - } - }, - { - "name": "Trusted Hosts", - "providerId": "trusted-hosts", - "subType": "anonymous", - "subComponents": {}, - "config": { - "host-sending-registration-request-must-match": [ - "true" - ], - "client-uris-must-match": [ - "true" - ] - } - }, - { - "name": "Full Scope Disabled", - "providerId": "scope", - "subType": "anonymous", - "subComponents": {}, - "config": {} - }, - { - "name": "Max Clients Limit", - "providerId": "max-clients", - "subType": "anonymous", - "subComponents": {}, - "config": { - "max-clients": [ - "200" - ] - } - }, - { - "name": "Consent Required", - "providerId": "consent-required", - "subType": "anonymous", - "subComponents": {}, - "config": {} - }, - { - "name": "Allowed Protocol Mapper Types", - "providerId": "allowed-protocol-mappers", - "subType": "authenticated", - "subComponents": {}, - "config": { - "allowed-protocol-mapper-types": [ - "saml-user-attribute-mapper", - "oidc-full-name-mapper", - "saml-role-list-mapper", - "saml-user-property-mapper", - "oidc-usermodel-attribute-mapper", - "oidc-address-mapper", - "oidc-usermodel-property-mapper", - "oidc-sha256-pairwise-sub-mapper" - ] - } - } - ], - "org.keycloak.keys.KeyProvider": [ - { - "name": "rsa-generated", - "providerId": "rsa-generated", - "subComponents": {}, - "config": { - "privateKey": [ - "MIIEowIBAAKCAQEAn5T13suF8mlS+pJXp0U1bto41nW55wpcs+Rps8ZVCRyJKWqzwSCYnI7lm0rB2wBpAAO4OPoj1zlmVoFmBPsDU9Xf7rjsJb5LIzIQDCZY44aSDZt6RR+gakPiQvlzHyW/RozYpngDJF7TsTD7rdRF1xQ4RprfBF8fwK/xsU7pxbeom5xDHZhz3fiw8s+7UdbmnazDHfAjU58aUrLGgVRfUsuoHjtsptYlOIXEifaeMetXZE+HhqLYRHQPDap5fbBJl773Trosn7N9nmzN4x1xxGj9So21WC5UboQs9sAIVgizc4omjZ5Y4RN9HLH7G4YwJctNntzmnJhDui9zAO+zSQIDAQABAoIBADi+F7rTtVoft0Cfnok8o6Y58/HVxHdxiMryUd95iy0FN4RBi48FTx6D9QKFz25Ws/8sU2n3D51srIXf1u24b1N0/f39RQKaqk7mcyxOylaEuBQcj5pah4ihgKd92UBfBKdKV5LBo6RgD3e2yhbiHr8+UlBQqzH7vOef6Bm6zIbfmi3N88swAJhP0YizRZFklsbmLsK6nkwyro00CHJvPVKSBbM+ad+/zIBsLw56MvNngB5TuFguUgoljd6M1T2z4utmZGlTUqrfE1onAVLJZoGnRohyIr7dJEg6YxWR70PxsgmkDKyeRvet9P1trO0n+OSprusfrC3cHJStabap1V0CgYEA1A/CtsqTnjdYYsB19eumZgdpzUgNc/YEAzZ/OWb8yTLoB2ncci+63A1rXHUXAqJFY7vtjn5mxv7SuASNbUrzq+6KfZvC1x9XEtnczqT/ypunNfxmIZuj8Nuu6vtURguZ8kPPwdkI8toTizRFeRE5ZDBvoQryiEVYugfHaHT5vzsCgYEAwKWODwquI0Lv9BuwdNVrBXQpkKh3ZfYOA7i9xvhxlM7xUu8OMCwwCPn3r7vrW5APjTqX4h330mJ44SLEs+7gbCUs4BbJBLA6g0ChlHa9PTkxp6tk2nDF/B34fxiZSRkE85L+d+at0Dc3hnlzLCJCzJawGpoPniPU9e4w0p4dN0sCgYAsGnMGjS8SUrRhJWHjGXVr9tK8TOXvXhULjgP7rj2Yoqu7Dvs4DFEyft/7RKbad2EzEtyfLA64CDtO5jN7rYDsGxpWcVSeZPg5BXJ0z8AbJTArfCjJiJMZ/rZsTIUEZFlKF2xYBolj6JLz+pUQTtK+0YwF1D8ItFN1rTR9twZSDQKBgQC6sPXNX+VH6LuPTjIf1x8CxwLs3EXxOpV0R9kp9GRl+HJnk6GlT30xhcThufQo5KAdllXQXIhoiuNoEoCbevhj9Vbax1oBQCNERSMRNEzKAx46xd9TzYwgeo7x5E3QR/3DaoVOfu+cY5ZcrF/PulgP2kxJS1mtQD5GIpGP2oinpwKBgGqiqTFPqRcelx76vBvTU+Jp1zM62T4AotbMrSQR/oUvqHe5Ytj/SbZx+wbbHAiyGgV700Mosyviik83YEAbR3kdOPjgYvAJJW2Y3jEMdQ7MwriXz8XLh5BGmYfVjkSOJXed9ua9WlYLKOJeXXv191BbDvrx5NXuJyVVU4vJx3YZ" - ], - "certificate": [ - "MIICnTCCAYUCBgFp4EYIrjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAdwcm90ZWFuMB4XDTE5MDQwMjIyNTYxOVoXDTI5MDQwMjIyNTc1OVowEjEQMA4GA1UEAwwHcHJvdGVhbjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJ+U9d7LhfJpUvqSV6dFNW7aONZ1uecKXLPkabPGVQkciSlqs8EgmJyO5ZtKwdsAaQADuDj6I9c5ZlaBZgT7A1PV3+647CW+SyMyEAwmWOOGkg2bekUfoGpD4kL5cx8lv0aM2KZ4AyRe07Ew+63URdcUOEaa3wRfH8Cv8bFO6cW3qJucQx2Yc934sPLPu1HW5p2swx3wI1OfGlKyxoFUX1LLqB47bKbWJTiFxIn2njHrV2RPh4ai2ER0Dw2qeX2wSZe+9066LJ+zfZ5szeMdccRo/UqNtVguVG6ELPbACFYIs3OKJo2eWOETfRyx+xuGMCXLTZ7c5pyYQ7ovcwDvs0kCAwEAATANBgkqhkiG9w0BAQsFAAOCAQEAVtmRKDb4OK5iSA46tagMBkp6L7WuPpCWuHGWwobEP+BecYsShW7zP3s12oA8SNSwbhvu0CRqgzxhuypgf3hKQFVU153Erv4hzkj+8S0s5LR/ZE7tDNY2lzJ3yQKXy3Md7EkuzzvOZ50MTrcSKAanWq/ZW1OTnrtGymj5zGJnTg7mMnJzEIGePxkvPu/QdchiPBLqxfZYm1jsFGY25djOC3N/KmVcRVmPRGuu6D8tBFHlKoPfZYPdbMvsvs24aupHKRcZ+ofTCpK+2Qo8c0pSSqeEYHGmuGqC6lC6ozxtxSABPO9Q1R1tZBU7Kg5HvXUwwmoVS3EGub46YbHqbmWMLg==" - ], - "priority": [ - "100" - ] - } - }, - { - "name": "hmac-generated", - "providerId": "hmac-generated", - "subComponents": {}, - "config": { - "kid": [ - "96afd00e-85cf-4d35-b18e-061d3813d8b2" - ], - "secret": [ - "qBFGKdUGf6xDgKphnRfoFzIzaFHJW4bYnZ9MinPFzN38X5_ctq-2u1q5RdZzeJukXvk2biHB8_s3DxWmmLZFsA" - ], - "priority": [ - "100" - ], - "algorithm": [ - "HS256" - ] - } - }, - { - "name": "aes-generated", - "providerId": "aes-generated", - "subComponents": {}, - "config": { - "kid": [ - "b04473d3-8395-4016-b455-19a9e951106b" - ], - "secret": [ - "x68mMOVdz3qKWzltzReV0g" - ], - "priority": [ - "100" - ] - } - } - ] - }, - "internationalizationEnabled": false, - "supportedLocales": [], - "authenticationFlows": [ - { - "alias": "Handle Existing Account", - "description": "Handle what to do if there is existing account with same email/username like authenticated identity provider", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-confirm-link", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "idp-email-verification", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "Verify Existing Account by Re-authentication", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "Verify Existing Account by Re-authentication", - "description": "Reauthentication of existing account", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "idp-username-password-form", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-otp-form", - "requirement": "OPTIONAL", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "browser", - "description": "browser based authentication", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "auth-cookie", - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-spnego", - "requirement": "DISABLED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "identity-provider-redirector", - "requirement": "ALTERNATIVE", - "priority": 25, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "forms", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "clients", - "description": "Base authentication for clients", - "providerId": "client-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "client-secret", - "requirement": "ALTERNATIVE", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-jwt", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-secret-jwt", - "requirement": "ALTERNATIVE", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "client-x509", - "requirement": "ALTERNATIVE", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "direct grant", - "description": "OpenID Connect Resource Owner Grant", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "direct-grant-validate-username", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "direct-grant-validate-password", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "direct-grant-validate-otp", - "requirement": "OPTIONAL", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "docker auth", - "description": "Used by Docker clients to authenticate against the IDP", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "docker-http-basic-authenticator", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "first broker login", - "description": "Actions taken after first broker login with identity provider account, which is not yet linked to any Keycloak account", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticatorConfig": "review profile config", - "authenticator": "idp-review-profile", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticatorConfig": "create unique user config", - "authenticator": "idp-create-user-if-unique", - "requirement": "ALTERNATIVE", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "requirement": "ALTERNATIVE", - "priority": 30, - "flowAlias": "Handle Existing Account", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "forms", - "description": "Username, password, otp and other auth forms.", - "providerId": "basic-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "auth-username-password-form", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-otp-form", - "requirement": "OPTIONAL", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "http challenge", - "description": "An authentication flow based on challenge-response HTTP Authentication Schemes", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "no-cookie-redirect", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "basic-auth", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "basic-auth-otp", - "requirement": "DISABLED", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "auth-spnego", - "requirement": "DISABLED", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "registration", - "description": "registration flow", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "registration-page-form", - "requirement": "REQUIRED", - "priority": 10, - "flowAlias": "registration form", - "userSetupAllowed": false, - "autheticatorFlow": true - } - ] - }, - { - "alias": "registration form", - "description": "registration form", - "providerId": "form-flow", - "topLevel": false, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "registration-user-creation", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-profile-action", - "requirement": "REQUIRED", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-password-action", - "requirement": "REQUIRED", - "priority": 50, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "registration-recaptcha-action", - "requirement": "DISABLED", - "priority": 60, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "reset credentials", - "description": "Reset credentials for a user if they forgot their password or something", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "reset-credentials-choose-user", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-credential-email", - "requirement": "REQUIRED", - "priority": 20, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-password", - "requirement": "REQUIRED", - "priority": 30, - "userSetupAllowed": false, - "autheticatorFlow": false - }, - { - "authenticator": "reset-otp", - "requirement": "OPTIONAL", - "priority": 40, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - }, - { - "alias": "saml ecp", - "description": "SAML ECP Profile Authentication Flow", - "providerId": "basic-flow", - "topLevel": true, - "builtIn": true, - "authenticationExecutions": [ - { - "authenticator": "http-basic-authenticator", - "requirement": "REQUIRED", - "priority": 10, - "userSetupAllowed": false, - "autheticatorFlow": false - } - ] - } - ], - "authenticatorConfig": [ - { - "alias": "create unique user config", - "config": { - "require.password.update.after.registration": "false" - } - }, - { - "alias": "review profile config", - "config": { - "update.profile.on.first.login": "missing" - } - } - ], - "requiredActions": [ - { - "alias": "CONFIGURE_TOTP", - "name": "Configure OTP", - "providerId": "CONFIGURE_TOTP", - "enabled": true, - "defaultAction": false, - "priority": 10, - "config": {} - }, - { - "alias": "terms_and_conditions", - "name": "Terms and Conditions", - "providerId": "terms_and_conditions", - "enabled": false, - "defaultAction": false, - "priority": 20, - "config": {} - }, - { - "alias": "UPDATE_PASSWORD", - "name": "Update Password", - "providerId": "UPDATE_PASSWORD", - "enabled": true, - "defaultAction": false, - "priority": 30, - "config": {} - }, - { - "alias": "UPDATE_PROFILE", - "name": "Update Profile", - "providerId": "UPDATE_PROFILE", - "enabled": true, - "defaultAction": false, - "priority": 40, - "config": {} - }, - { - "alias": "VERIFY_EMAIL", - "name": "Verify Email", - "providerId": "VERIFY_EMAIL", - "enabled": true, - "defaultAction": false, - "priority": 50, - "config": {} - } - ], - "browserFlow": "browser", - "registrationFlow": "registration", - "directGrantFlow": "direct grant", - "resetCredentialsFlow": "reset credentials", - "clientAuthenticationFlow": "clients", - "dockerAuthenticationFlow": "docker auth", - "attributes": { - "_browser_header.xXSSProtection": "1; mode=block", - "_browser_header.xFrameOptions": "SAMEORIGIN", - "_browser_header.strictTransportSecurity": "max-age=31536000; includeSubDomains", - "permanentLockout": "false", - "quickLoginCheckMilliSeconds": "1000", - "_browser_header.xRobotsTag": "none", - "maxFailureWaitSeconds": "900", - "minimumQuickLoginWaitSeconds": "60", - "failureFactor": "30", - "actionTokenGeneratedByUserLifespan": "300", - "maxDeltaTimeSeconds": "43200", - "_browser_header.xContentTypeOptions": "nosniff", - "offlineSessionMaxLifespan": "5184000", - "actionTokenGeneratedByAdminLifespan": "43200", - "_browser_header.contentSecurityPolicyReportOnly": "", - "bruteForceProtected": "false", - "_browser_header.contentSecurityPolicy": "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", - "waitIncrementSeconds": "60", - "offlineSessionMaxLifespanEnabled": "false" - }, - "users": [ - { - "username": "admin", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "NICTtwsvSxJ5hL8hLAuleDUv9jwZcuXgxviMXvR++cciyPtiIEStEaJUyfA9DOir59awjPrHOumsclPVjNBplA==", - "salt": "T/2P5o5oxFJUEk68BRURRg==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879354, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "admin", - "managers", - "user", - "IT", - "HR" - ], - "notBefore": 0, - "groups": [] - }, - { - "username": "alice", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "A3okqV2T/ybXTVEgKfosoSjP8Yc9IZbFP/SY4cEd6hag7TABQrQ6nUSuwagGt96l8cw1DTijO75PqX6uiTXMzw==", - "salt": "sl4mXx6T9FypPH/s9TngfQ==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879116, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "user", - "HR" - ], - "notBefore": 0, - "groups": [] - }, - { - "username": "jdoe", - "enabled": true, - "totp": false, - "emailVerified": false, - "credentials": [ - { - "type": "password", - "hashedSaltedValue": "JV3DUNLjqOadjbBOtC4rvacQI553CGaDGAzBS8MR5ReCr7SwF3E6CsW3T7/XO8ITZAsch8+A/6loeuCoVLLJrg==", - "salt": "uCbOH7HZtyDtMd0E9DG/nw==", - "hashIterations": 27500, - "counter": 0, - "algorithm": "pbkdf2-sha256", - "digits": 0, - "period": 0, - "createdDate": 1554245879227, - "config": {} - } - ], - "disableableCredentialTypes": [ - "password" - ], - "requiredActions": [], - "realmRoles": [ - "managers", - "user", - "IT" - ], - "notBefore": 0, - "groups": [] - } - ], - "keycloakVersion": "6.0.0", - "userManagedAccessAllowed": false -} diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/startServices.sh b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/startServices.sh deleted file mode 100755 index 69ebc0ce46..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docker-compose/startServices.sh +++ /dev/null @@ -1,73 +0,0 @@ -#!/bin/sh -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - - -echo "Script requires your Kogito Quickstart to be compiled" - -PROJECT_VERSION=$(cd ../ && mvn help:evaluate -Dexpression=project.version -q -DforceStdout) - -echo "Project version: ${PROJECT_VERSION}" - -if [[ $PROJECT_VERSION == *SNAPSHOT ]]; -then - KOGITO_VERSION="latest" -else - KOGITO_VERSION=${PROJECT_VERSION%.*} -fi - -echo "Kogito Image version: ${KOGITO_VERSION}" -echo "KOGITO_VERSION=${KOGITO_VERSION}" > ".env" - -if [ "$(uname)" == "Darwin" ]; then - echo "DOCKER_GATEWAY_HOST=kubernetes.docker.internal" >> ".env" -elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then - echo "DOCKER_GATEWAY_HOST=172.17.0.1" >> ".env" -fi - -PERSISTENCE_FOLDER=./persistence -KOGITO_EXAMPLE_PERSISTENCE=../target/classes/META-INF/resources/persistence/protobuf - -rm -rf $PERSISTENCE_FOLDER - -mkdir -p $PERSISTENCE_FOLDER - -if [ -d "$KOGITO_EXAMPLE_PERSISTENCE" ] -then - cp $KOGITO_EXAMPLE_PERSISTENCE/*.proto $PERSISTENCE_FOLDER/ -else - echo "$KOGITO_EXAMPLE_PERSISTENCE does not exist. Have you compiled the project?" - exit 1 -fi - -SVG_FOLDER=./svg - -KOGITO_EXAMPLE_SVG_FOLDER=../target/classes/META-INF/processSVG - -mkdir -p $SVG_FOLDER - -if [ -d "$KOGITO_EXAMPLE_SVG_FOLDER" ] -then - cp $KOGITO_EXAMPLE_SVG_FOLDER/*.svg $SVG_FOLDER -else - echo "$KOGITO_EXAMPLE_SVG_FOLDER does not exist. Have you compiled the project?" - exit 1 -fi - -docker-compose up \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_details1.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_details1.png deleted file mode 100644 index 5f0a95379c..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_details1.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_details2.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_details2.png deleted file mode 100644 index 7ddf2fb204..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_details2.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_details3.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_details3.png deleted file mode 100644 index fcc6ba57fb..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_details3.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_list1.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_list1.png deleted file mode 100644 index 1caeae2ef2..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_list1.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_list2.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_list2.png deleted file mode 100644 index a4c3acce85..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/MC_list2.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_FirstLine.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_FirstLine.png deleted file mode 100644 index e0f0f74e56..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_FirstLine.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_SecondLine.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_SecondLine.png deleted file mode 100644 index 64edc107ac..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_SecondLine.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_list1.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_list1.png deleted file mode 100644 index 0cc967bd1d..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_list1.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_list2.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_list2.png deleted file mode 100644 index deabbc048e..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/TC_list2.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/keycloak-login.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/keycloak-login.png deleted file mode 100644 index 58d85f1f43..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/keycloak-login.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/management-console.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/management-console.png deleted file mode 100644 index 9a6053e529..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/management-console.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/process.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/process.png deleted file mode 100644 index 974dfaebaf..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/process.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/services.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/services.png deleted file mode 100644 index 2f456fa7c7..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/services.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/task-console.png b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/task-console.png deleted file mode 100644 index 08688fe01e..0000000000 Binary files a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/docs/images/task-console.png and /dev/null differ diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/pom.xml b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/pom.xml deleted file mode 100644 index cfbfd16d79..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/pom.xml +++ /dev/null @@ -1,183 +0,0 @@ - - - - 4.0.0 - - org.kie.kogito.examples - kogito-springboot-examples - 999-SNAPSHOT - - - process-usertasks-with-security-oidc-springboot-with-console - Kogito Example :: Process Usertasks With Security OIDC Spring Boot :: Console - Kogito usertasks orchestration with security enabled on REST api - Spring Boot - With Console - - - true - 999-SNAPSHOT - 999-SNAPSHOT - - - - - - org.kie.kogito - kogito-spring-boot-bom - ${kogito.bom.version} - pom - import - - - org.infinispan - infinispan-bom - ${version.org.infinispan} - pom - import - - - - - - - org.springframework.boot - spring-boot-starter-actuator - - - - - org.jbpm - jbpm-spring-boot-starter - - - org.kie.kogito - kogito-api - - - org.springframework.boot - spring-boot-starter-security - - - org.springframework.boot - spring-boot-starter-oauth2-resource-server - - - - org.kie - kie-addons-springboot-events-process-kafka - - - org.kie - kie-addons-springboot-persistence-infinispan - - - org.infinispan - infinispan-spring-boot3-starter-remote - - - org.kie - kie-addons-springboot-process-svg - - - org.kie - kie-addons-springboot-process-management - - - org.springframework.kafka - spring-kafka - - - - - org.springframework.boot - spring-boot-starter-test - test - - - io.rest-assured - rest-assured - test - - - org.kie.kogito - kogito-spring-boot-test-utils - ${version.org.kie.kogito} - test - - - - - ${project.artifactId} - - - org.springframework.boot - spring-boot-maven-plugin - ${version.org.springframework.boot} - - - - repackage - - - - - - org.kie.kogito - kogito-maven-plugin - ${version.org.kie.kogito} - true - - - - - - container - - - container - - - - - - com.google.cloud.tools - jib-maven-plugin - - - install - - dockerBuild - - - - - - ${project.groupId}/${project.artifactId}:1.0 - - - - - - - - diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/acme/travels/Address.java b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/acme/travels/Address.java deleted file mode 100644 index 662dfa9b9f..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/acme/travels/Address.java +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -public class Address { - - private String street; - private String city; - private String zipCode; - private String country; - - public Address() { - - } - - public Address(String street, String city, String zipCode, String country) { - super(); - this.street = street; - this.city = city; - this.zipCode = zipCode; - this.country = country; - } - - public String getStreet() { - return street; - } - - public void setStreet(String street) { - this.street = street; - } - - public String getCity() { - return city; - } - - public void setCity(String city) { - this.city = city; - } - - public String getZipCode() { - return zipCode; - } - - public void setZipCode(String zipCode) { - this.zipCode = zipCode; - } - - public String getCountry() { - return country; - } - - public void setCountry(String country) { - this.country = country; - } - - @Override - public String toString() { - return "Address [street=" + street + ", city=" + city + ", zipCode=" + zipCode + ", country=" + country + "]"; - } -} diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/acme/travels/Traveller.java b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/acme/travels/Traveller.java deleted file mode 100644 index c24685803d..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/acme/travels/Traveller.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -public class Traveller { - - private String firstName; - private String lastName; - private String email; - private String nationality; - private Address address; - - public Traveller() { - - } - - public Traveller(String firstName, String lastName, String email, String nationality, Address address) { - super(); - this.firstName = firstName; - this.lastName = lastName; - this.email = email; - this.nationality = nationality; - this.address = address; - } - - public String getFirstName() { - return firstName; - } - - public void setFirstName(String firstName) { - this.firstName = firstName; - } - - public String getLastName() { - return lastName; - } - - public void setLastName(String lastName) { - this.lastName = lastName; - } - - public String getEmail() { - return email; - } - - public void setEmail(String email) { - this.email = email; - } - - public String getNationality() { - return nationality; - } - - public void setNationality(String nationality) { - this.nationality = nationality; - } - - public Address getAddress() { - return address; - } - - public void setAddress(Address address) { - this.address = address; - } - - @Override - public String toString() { - return "Traveller [firstName=" + firstName + ", lastName=" + lastName + ", email=" + email + ", nationality=" - + nationality + ", address=" + address + "]"; - } - -} diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/kie/kogito/springboot/CorsConfig.java b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/kie/kogito/springboot/CorsConfig.java deleted file mode 100644 index c8a7b327ed..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/kie/kogito/springboot/CorsConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.kie.kogito.springboot; - -import java.util.Arrays; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.cors.CorsConfiguration; -import org.springframework.web.cors.UrlBasedCorsConfigurationSource; -import org.springframework.web.filter.CorsFilter; - -@Configuration -public class CorsConfig { - - @Bean - public CorsFilter corsFilter() { - UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); - - CorsConfiguration config = new CorsConfiguration(); - config.setAllowCredentials(true); - config.setAllowedOriginPatterns(Arrays.asList("http://*:8080", "http://*:8280", "http://*:8380", "http://*:8480")); - config.addAllowedHeader("*"); - config.addAllowedMethod("OPTIONS"); - config.addAllowedMethod("GET"); - config.addAllowedMethod("POST"); - config.addAllowedMethod("PUT"); - config.addAllowedMethod("DELETE"); - source.registerCorsConfiguration("/**", - config); - - return new CorsFilter(source); - } -} \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/kie/kogito/springboot/DefaultWebSecurityConfig.java b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/kie/kogito/springboot/DefaultWebSecurityConfig.java deleted file mode 100644 index 52dbc7dd02..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/kie/kogito/springboot/DefaultWebSecurityConfig.java +++ /dev/null @@ -1,43 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.kie.kogito.springboot; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.security.config.annotation.web.builders.HttpSecurity; -import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity; -import org.springframework.security.web.SecurityFilterChain; - -@Configuration -@EnableWebSecurity -class DefaultWebSecurityConfig { - - @Bean - public SecurityFilterChain configure(HttpSecurity http) throws Exception { - http.authorizeHttpRequests() - .anyRequest() - .authenticated() - .and() - .oauth2ResourceServer().jwt(); - http.cors() - .and() - .csrf().disable(); - return http.build(); - } -} diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/kie/kogito/springboot/KogitoSpringbootApplication.java b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/kie/kogito/springboot/KogitoSpringbootApplication.java deleted file mode 100644 index dfb4db675e..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/java/org/kie/kogito/springboot/KogitoSpringbootApplication.java +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.kie.kogito.springboot; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication(scanBasePackages = { "org.kie.kogito.**", "org.acme.travels.**" }) -public class KogitoSpringbootApplication { - - public static void main(String[] args) { - SpringApplication.run(KogitoSpringbootApplication.class, args); - } - -} diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/META-INF/processSVG/approvals.svg b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/META-INF/processSVG/approvals.svg deleted file mode 100644 index 12d6a28af0..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/META-INF/processSVG/approvals.svg +++ /dev/null @@ -1 +0,0 @@ -Second Line approval EndStartProcessFirst Line approval \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/META-INF/resources/index.html b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/META-INF/resources/index.html deleted file mode 100644 index c2e78230c5..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/META-INF/resources/index.html +++ /dev/null @@ -1,153 +0,0 @@ - - - - - - - - Kogito quickstart - - - - - - - - - - - - - - -
-
-
-
-

Welcome to Kogito

-

- Cloud-native business automation for building intelligent applications, backed by - battle-tested capabilities. -

- - Get Started - - - Latest updates - -
-
-
-
-
-
-
-

Quick Links

- -
-
-
- - - \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/application.properties b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/application.properties deleted file mode 100644 index c5d5cc1656..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/application.properties +++ /dev/null @@ -1,38 +0,0 @@ -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -server.address=0.0.0.0 -infinispan.remote.server-list=127.0.0.1:11222 - -spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8480/auth/realms/kogito - -#mp.messaging.outgoing.kogito-processinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-processinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-processinstances-events.topic=kogito-processinstances-events -mp.messaging.outgoing.kogito-processinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-usertaskinstances-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-usertaskinstances-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-usertaskinstances-events.topic=kogito-usertaskinstances-events -mp.messaging.outgoing.kogito-usertaskinstances-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer - -#mp.messaging.outgoing.kogito-variables-events.bootstrap.servers=localhost:9092 -mp.messaging.outgoing.kogito-variables-events.connector=smallrye-kafka -mp.messaging.outgoing.kogito-variables-events.topic=kogito-variables-events -mp.messaging.outgoing.kogito-variables-events.value.serializer=org.apache.kafka.common.serialization.StringSerializer \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/org/acme/travels/approval.bpmn2 b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/org/acme/travels/approval.bpmn2 deleted file mode 100644 index d0a28ede66..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/main/resources/org/acme/travels/approval.bpmn2 +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SequenceFlow_4 - - - - - - - - SequenceFlow_6 - - - - - - - - SequenceFlow_4 - SequenceFlow_5 - - - - - - - - - - UserTask_1_TaskNameInputX - UserTask_1_travellerInputX - UserTask_1_SkippableInputX - UserTask_1_GroupIdInputX - UserTask_1_PriorityInputX - - - UserTask_1_ActorIdOutputX - UserTask_1_approvedOutputX - - - - UserTask_1_TaskNameInputX - - - - - - - traveller - UserTask_1_travellerInputX - - - UserTask_1_SkippableInputX - - - - - - - UserTask_1_GroupIdInputX - - - - - - - UserTask_1_PriorityInputX - - - - - - - UserTask_1_ActorIdOutputX - approver - - - UserTask_1_approvedOutputX - firstLineApproval - - - - jdoe - - - - - - - - - - SequenceFlow_5 - SequenceFlow_6 - - - - - - - - - - UserTask_2_TaskNameInputX - UserTask_2_ExcludedOwnerIdInputX - UserTask_2_travellerInputX - UserTask_2_SkippableInputX - UserTask_2_GroupIdInputX - UserTask_2_PriorityInputX - - - UserTask_2_approvedOutputX - - - - UserTask_2_TaskNameInputX - - - - - - - approver - UserTask_2_ExcludedOwnerIdInputX - - - traveller - UserTask_2_travellerInputX - - - UserTask_2_SkippableInputX - - - - - - - UserTask_2_GroupIdInputX - - - - - - - UserTask_2_PriorityInputX - - - - - - - UserTask_2_approvedOutputX - secondLineApproval - - - - jdoe - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - _q-f20MLBEDmYuc9yln6QJA - _q-f20MLBEDmYuc9yln6QJA - - \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/test/java/org/acme/travels/ApprovalsProcessTestIT.java b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/test/java/org/acme/travels/ApprovalsProcessTestIT.java deleted file mode 100644 index 54e4248b09..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/test/java/org/acme/travels/ApprovalsProcessTestIT.java +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -import java.util.Arrays; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - -import org.jbpm.process.instance.impl.humantask.HumanTaskTransition; -import org.jbpm.process.instance.impl.humantask.phases.Claim; -import org.jbpm.process.instance.impl.workitem.Complete; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.kie.kogito.Model; -import org.kie.kogito.auth.IdentityProviders; -import org.kie.kogito.auth.SecurityPolicy; -import org.kie.kogito.process.Process; -import org.kie.kogito.process.ProcessInstance; -import org.kie.kogito.process.WorkItem; -import org.kie.kogito.springboot.KogitoSpringbootApplication; -import org.kie.kogito.testcontainers.springboot.InfinispanSpringBootTestResource; -import org.kie.kogito.testcontainers.springboot.KeycloakSpringBootTestResource; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.test.annotation.DirtiesContext; -import org.springframework.test.annotation.DirtiesContext.ClassMode; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertNotNull; - -@ExtendWith(SpringExtension.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = KogitoSpringbootApplication.class) -@DirtiesContext(classMode = ClassMode.AFTER_EACH_TEST_METHOD) // reset spring context after each test method -@ContextConfiguration(initializers = { KeycloakSpringBootTestResource.class, InfinispanSpringBootTestResource.Conditional.class }) -public class ApprovalsProcessTestIT { - @Autowired - @Qualifier("approvals") - Process approvalsProcess; - - @Test - public void testApprovalProcess() { - - assertNotNull(approvalsProcess); - - Model m = approvalsProcess.createModel(); - Map parameters = new HashMap<>(); - parameters.put("traveller", new Traveller("John", "Doe", "john.doe@example.com", "American", new Address("main street", "Boston", "10005", "US"))); - m.fromMap(parameters); - - ProcessInstance processInstance = approvalsProcess.createInstance(m); - processInstance.start(); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Arrays.asList("managers"))); - - processInstance.workItems(policy); - - List workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - Map results = new HashMap<>(); - results.put("approved", true); - processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - - workItems = processInstance.workItems(policy); - assertEquals(0, workItems.size()); - - policy = SecurityPolicy.of(IdentityProviders.of("john", Arrays.asList("managers"))); - processInstance.workItems(policy); - - workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - - results.put("approved", false); - processInstance.completeWorkItem(workItems.get(0).getId(), results, policy); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); - - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); - } - - @Test - public void testApprovalProcessViaPhases() { - - assertNotNull(approvalsProcess); - - Model m = approvalsProcess.createModel(); - Map parameters = new HashMap<>(); - parameters.put("traveller", new Traveller("John", "Doe", "john.doe@example.com", "American", new Address("main street", "Boston", "10005", "US"))); - m.fromMap(parameters); - - ProcessInstance processInstance = approvalsProcess.createInstance(m); - processInstance.start(); - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_ACTIVE, processInstance.status()); - - SecurityPolicy policy = SecurityPolicy.of(IdentityProviders.of("admin", Arrays.asList("managers"))); - - processInstance.workItems(policy); - - List workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Claim.ID, null, policy)); - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Complete.ID, Collections.singletonMap("approved", true), policy)); - - workItems = processInstance.workItems(policy); - assertEquals(0, workItems.size()); - - policy = SecurityPolicy.of(IdentityProviders.of("john", Arrays.asList("managers"))); - - processInstance.workItems(policy); - - workItems = processInstance.workItems(policy); - assertEquals(1, workItems.size()); - - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Claim.ID, null, policy)); - processInstance.transitionWorkItem(workItems.get(0).getId(), new HumanTaskTransition(Complete.ID, Collections.singletonMap("approved", false), policy)); - - assertEquals(org.kie.api.runtime.process.ProcessInstance.STATE_COMPLETED, processInstance.status()); - - Model result = (Model) processInstance.variables(); - assertEquals(4, result.toMap().size()); - assertEquals(result.toMap().get("approver"), "admin"); - assertEquals(result.toMap().get("firstLineApproval"), true); - assertEquals(result.toMap().get("secondLineApproval"), false); - } -} diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/test/java/org/acme/travels/ApprovalsRestIT.java b/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/test/java/org/acme/travels/ApprovalsRestIT.java deleted file mode 100644 index d5ae04c3cd..0000000000 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/test/java/org/acme/travels/ApprovalsRestIT.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.acme.travels; - -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.kie.kogito.springboot.KogitoSpringbootApplication; -import org.kie.kogito.testcontainers.springboot.InfinispanSpringBootTestResource; -import org.kie.kogito.testcontainers.springboot.KafkaSpringBootTestResource; -import org.kie.kogito.testcontainers.springboot.KeycloakSpringBootTestResource; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.boot.test.context.SpringBootTest; -import org.springframework.boot.test.web.server.LocalServerPort; -import org.springframework.test.context.ContextConfiguration; -import org.springframework.test.context.junit.jupiter.SpringExtension; - -import io.restassured.RestAssured; -import io.restassured.http.ContentType; - -import static io.restassured.RestAssured.given; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.CoreMatchers.notNullValue; - -@ExtendWith(SpringExtension.class) -@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT, classes = KogitoSpringbootApplication.class) -@ContextConfiguration(initializers = { KeycloakSpringBootTestResource.class, InfinispanSpringBootTestResource.Conditional.class, KafkaSpringBootTestResource.class }) -public class ApprovalsRestIT { - - @LocalServerPort - int randomServerPort; - - @Value("${keycloak.auth-server-url}") - private String keycloakUrl; - - @BeforeEach - public void before() { - RestAssured.port = randomServerPort; - } - - @Test - public void testStartApprovalUnauthenticated() { - given() - .body("{\"traveller\" : {\"firstName\" : \"John\",\"lastName\" : \"Doe\",\"email\" : \"john.doe@example.com\",\"nationality\" : \"American\",\"address\" : {\"street\" : \"main street\",\"city\" : \"Boston\",\"zipCode\" : \"10005\",\"country\" : \"US\"}}") - .contentType(ContentType.JSON) - .when() - .post("/approvals") - .then() - .statusCode(401); - } - - @Test - public void testStartApprovalAuthorized() { - // start new approval - String id = given() - .auth().oauth2(getAccessToken("mary")) - .body("{\"traveller\" : {\"firstName\" : \"John\",\"lastName\" : \"Doe\",\"email\" : \"john.doe@example.com\",\"nationality\" : \"American\",\"address\" : {\"street\" : \"main street\",\"city\" : \"Boston\",\"zipCode\" : \"10005\",\"country\" : \"US\"}}}") - .contentType(ContentType.JSON) - .when() - .post("/approvals") - .then() - .statusCode(201) - .body("id", notNullValue()).extract().path("id"); - - // get just started approval - given() - .auth().oauth2(getAccessToken("mary")) - .accept(ContentType.JSON) - .when() - .get("/approvals/" + id) - .then() - .statusCode(200) - .body("id", is(id)); - - // tasks assigned in just started approval - String taskInfo = given() - .auth() - .oauth2(getAccessToken("mary")) - .accept(ContentType.JSON) - .when() - .get("/approvals/" + id + "/tasks?user=admin&group=managers") - .then() - .statusCode(200) - .body("size()", is(1)) - .body("[0].name", is("firstLineApproval")) - .extract() - .path("[0].id"); - - // complete first task without authorization header as it authorization is managed on task level - // thus user and group(s) must be provided - String payload = "{}"; - given() - .auth().oauth2(getAccessToken("mary")) - .contentType(ContentType.JSON) - .accept(ContentType.JSON) - .body(payload) - .when() - .post("/approvals/" + id + "/firstLineApproval/" + taskInfo + "?user=mary&group=managers") - .then() - .statusCode(200) - .body("id", is(id)); - - // lastly abort the approval - given() - .auth().oauth2(getAccessToken("mary")) - .accept(ContentType.JSON) - .when() - .delete("/approvals/" + id) - .then() - .statusCode(200) - .body("id", is(id)); - } - - private String getAccessToken(String userName) { - return given() - .param("grant_type", "password") - .param("username", userName) - .param("password", userName) - .param("client_id", "kogito-app") - .param("client_secret", "secret") - .when() - .post(keycloakUrl + "/realms/kogito/protocol/openid-connect/token") - .then() - .extract() - .path("access_token"); - } -} diff --git a/serverless-operator-examples/sonataflow-apisix-oidc/README.md b/serverless-operator-examples/sonataflow-apisix-oidc/README.md new file mode 100644 index 0000000000..57a121bdd1 --- /dev/null +++ b/serverless-operator-examples/sonataflow-apisix-oidc/README.md @@ -0,0 +1,3 @@ +# SonataFlow Authentication and Authorization with Keycloak and APISIX + +This is an example directory to support the guide outlined here: [https://sonataflow.org/serverlessworkflow/latest/cloud/custom-ingress-authz.html](https://sonataflow.org/serverlessworkflow/latest/cloud/custom-ingress-authz.html). Please read it in order to fully understand how to use this example. diff --git a/serverless-operator-examples/sonataflow-apisix-oidc/manifests/bases/01-postgres.yaml b/serverless-operator-examples/sonataflow-apisix-oidc/manifests/bases/01-postgres.yaml new file mode 100644 index 0000000000..0de874326a --- /dev/null +++ b/serverless-operator-examples/sonataflow-apisix-oidc/manifests/bases/01-postgres.yaml @@ -0,0 +1,86 @@ +# Copyright 2024 Apache Software Foundation (ASF) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +--- +apiVersion: v1 +kind: PersistentVolumeClaim +metadata: + labels: + app.kubernetes.io/name: postgres + name: postgres-pvc +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 1Gi +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/name: postgres + name: postgres +spec: + replicas: 1 + selector: + matchLabels: + app.kubernetes.io/name: postgres + template: + metadata: + labels: + app.kubernetes.io/name: postgres + spec: + containers: + - name: postgres + image: postgres + imagePullPolicy: "IfNotPresent" + ports: + - containerPort: 5432 + volumeMounts: + - name: storage + mountPath: /var/lib/pgsql/data + envFrom: + - secretRef: + name: postgres-secrets + readinessProbe: + exec: + command: ["pg_isready"] + initialDelaySeconds: 15 + timeoutSeconds: 2 + livenessProbe: + exec: + command: ["pg_isready"] + initialDelaySeconds: 15 + timeoutSeconds: 2 + resources: + limits: + memory: "256Mi" + cpu: "500m" + volumes: + - name: storage + persistentVolumeClaim: + claimName: postgres-pvc +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/name: postgres + name: postgres +spec: + selector: + app.kubernetes.io/name: postgres + ports: + - port: 5432 diff --git a/serverless-operator-examples/sonataflow-apisix-oidc/manifests/bases/02-keycloak.yaml b/serverless-operator-examples/sonataflow-apisix-oidc/manifests/bases/02-keycloak.yaml new file mode 100644 index 0000000000..515cb7f7e2 --- /dev/null +++ b/serverless-operator-examples/sonataflow-apisix-oidc/manifests/bases/02-keycloak.yaml @@ -0,0 +1,92 @@ +# Copyright 2024 Apache Software Foundation (ASF) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: v1 +kind: Service +metadata: + name: keycloak + labels: + app: keycloak +spec: + ports: + - name: http + port: 8080 + targetPort: 8080 + selector: + app: keycloak + type: NodePort +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + name: keycloak + labels: + app: keycloak +spec: + replicas: 1 + selector: + matchLabels: + app: keycloak + template: + metadata: + labels: + app: keycloak + spec: + initContainers: + - name: init-postgres + image: registry.access.redhat.com/ubi9/ubi-minimal:latest + imagePullPolicy: IfNotPresent + command: + [ + "sh", + "-c", + 'until (echo 1 > /dev/tcp/postgres.$(cat /var/run/secrets/kubernetes.io/serviceaccount/namespace).svc.cluster.local/5432) >/dev/null 2>&1; do echo "Waiting for postgres server"; sleep 3; done;', + ] + containers: + - name: keycloak + image: keycloak + imagePullPolicy: "IfNotPresent" + args: ["start-dev"] + env: + - name: KEYCLOAK_ADMIN + value: "admin" + - name: KEYCLOAK_ADMIN_PASSWORD + value: "admin" + - name: KC_PROXY + value: "edge" + - name: KC_DB + value: postgres + - name: KC_DB_USERNAME + valueFrom: + secretKeyRef: + key: POSTGRES_USER + name: postgres-secrets + - name: KC_DB_PASSWORD + valueFrom: + secretKeyRef: + key: POSTGRES_PASSWORD + name: postgres-secrets + - name: KC_DB_URL_HOST + value: postgres + ports: + - name: http + containerPort: 8080 + readinessProbe: + httpGet: + path: /realms/master + port: 8080 + resources: + limits: + memory: "2Gi" + cpu: "1" diff --git a/serverless-operator-examples/sonataflow-apisix-oidc/manifests/bases/kustomization.yaml b/serverless-operator-examples/sonataflow-apisix-oidc/manifests/bases/kustomization.yaml new file mode 100644 index 0000000000..d0065a1f46 --- /dev/null +++ b/serverless-operator-examples/sonataflow-apisix-oidc/manifests/bases/kustomization.yaml @@ -0,0 +1,37 @@ +# Copyright 2024 Apache Software Foundation (ASF) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - 01-postgres.yaml + - 02-keycloak.yaml + +images: + - name: postgres + newName: docker.io/library/postgres + newTag: alpine3.19 + - name: keycloak + newName: quay.io/keycloak/keycloak + newTag: 24.0.2 + +secretGenerator: + - name: postgres-secrets + options: + disableNameSuffixHash: true + literals: + - POSTGRES_USER=keycloak + - POSTGRES_PASSWORD=keycloak + - POSTGRES_DATABASE=keycloak + - PGDATA=/var/lib/pgsql/data diff --git a/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/01-sonataflow-greeting.yaml b/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/01-sonataflow-greeting.yaml new file mode 100644 index 0000000000..a201c91fe1 --- /dev/null +++ b/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/01-sonataflow-greeting.yaml @@ -0,0 +1,58 @@ +# Copyright 2024 Apache Software Foundation (ASF) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: sonataflow.org/v1alpha08 +kind: SonataFlow +metadata: + name: greeting + annotations: + sonataflow.org/description: Greeting example on k8s! + sonataflow.org/version: 0.0.1 +spec: + flow: + start: ChooseOnLanguage + functions: + - name: greetFunction + type: custom + operation: sysout + states: + - name: ChooseOnLanguage + type: switch + dataConditions: + - condition: '${ .language == "English" }' + transition: GreetInEnglish + - condition: '${ .language == "Spanish" }' + transition: GreetInSpanish + defaultCondition: GreetInEnglish + - name: GreetInEnglish + type: inject + data: + greeting: "Hello from YAML Workflow, " + transition: GreetPerson + - name: GreetInSpanish + type: inject + data: + greeting: "Saludos desde YAML Workflow, " + transition: GreetPerson + - name: GreetPerson + type: operation + stateDataFilter: + output: '${ {"message": (.greeting + $WORKFLOW.identity)} }' + actions: + - name: greetAction + functionRef: + refName: greetFunction + arguments: + message: ".greeting+.name" + end: true diff --git a/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/02-sonataflow-route.yaml b/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/02-sonataflow-route.yaml new file mode 100644 index 0000000000..c2ca1afc0e --- /dev/null +++ b/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/02-sonataflow-route.yaml @@ -0,0 +1,40 @@ +# Copyright 2024 Apache Software Foundation (ASF) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +apiVersion: apisix.apache.org/v2 +kind: ApisixRoute +metadata: + name: sonataflow +spec: + http: + - name: greeting + match: + hosts: + - local.greeting.sonataflow.org + paths: + - "/*" + backends: + - serviceName: greeting + servicePort: 80 + plugins: + - name: openid-connect + enable: true + config: + client_id: apisix-ingress + client_secret: + discovery: http://keycloak.keycloak.svc.cluster.local:8080/realms/sonataflow/.well-known/openid-configuration + scope: profile email + bearer_only: true + realm: sonataflow + introspection_endpoint_auth_method: client_secret_post diff --git a/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/greeting.svg b/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/greeting.svg new file mode 100644 index 0000000000..ad7dcc8bb7 --- /dev/null +++ b/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/greeting.svg @@ -0,0 +1 @@ +StartChooseOnLanguag e GreetInEnglishGreetInSpanishGreetPersonEnd${ .langua... ${ .langua... ${ .langua... ${ .langua... \ No newline at end of file diff --git a/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/greeting.sw.yaml b/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/greeting.sw.yaml new file mode 100644 index 0000000000..4753a74719 --- /dev/null +++ b/serverless-operator-examples/sonataflow-apisix-oidc/workflow-app/greeting.sw.yaml @@ -0,0 +1,55 @@ +# Copyright 2024 Apache Software Foundation (ASF) +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +id: "workflow_unique_identifier" +version: "0.1" +specVersion: "0.8" +name: "Workflow name" +description: "Workflow description" +functions: + - name: greetFunction + type: custom + operation: sysout +start: ChooseOnLanguage +states: + - name: ChooseOnLanguage + type: switch + dataConditions: + - condition: '${ .language == "English" }' + transition: GreetInEnglish + - condition: '${ .language == "Spanish" }' + transition: GreetInSpanish + defaultCondition: + transition: GreetInEnglish + - name: GreetInEnglish + type: inject + data: + greeting: "Hello from YAML Workflow, " + transition: GreetPerson + - name: GreetInSpanish + type: inject + data: + greeting: "Saludos desde YAML Workflow, " + transition: GreetPerson + - name: GreetPerson + type: operation + stateDataFilter: + output: '${ { "message": (.greeting + .name) } }' + actions: + - name: greetAction + functionRef: + refName: greetFunction + arguments: + message: ".greeting+.name" + end: true diff --git a/serverless-workflow-examples/pom.xml b/serverless-workflow-examples/pom.xml index 4fac574db8..962cbd298a 100644 --- a/serverless-workflow-examples/pom.xml +++ b/serverless-workflow-examples/pom.xml @@ -53,6 +53,7 @@ serverless-workflow-custom-type serverless-workflow-data-index-persistence-addon-quarkus serverless-workflow-data-index-quarkus + serverless-workflow-dmn-quarkus serverless-workflow-error-quarkus serverless-workflow-events-quarkus serverless-workflow-expression-quarkus diff --git a/serverless-workflow-examples/serverless-workflow-annotations-description/pom.xml b/serverless-workflow-examples/serverless-workflow-annotations-description/pom.xml index a0e76573f9..31c831759f 100644 --- a/serverless-workflow-examples/serverless-workflow-annotations-description/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-annotations-description/pom.xml @@ -81,10 +81,6 @@ io.quarkus quarkus-resteasy-jackson
- - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-workflow/pom.xml b/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-workflow/pom.xml index edfc25e6b2..da28bfe16f 100644 --- a/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-workflow/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-callback-events-over-http-quarkus/callback-workflow/pom.xml @@ -78,10 +78,6 @@ io.quarkus quarkus-resteasy-jackson - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-callback-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-callback-quarkus/pom.xml index 952b55b9a8..8de08440c7 100644 --- a/serverless-workflow-examples/serverless-workflow-callback-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-callback-quarkus/pom.xml @@ -88,10 +88,6 @@ org.kie kie-addons-quarkus-process-management - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - io.quarkus diff --git a/serverless-workflow-examples/serverless-workflow-compensation-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-compensation-quarkus/pom.xml index e1e779d3bd..b74e9d27bd 100644 --- a/serverless-workflow-examples/serverless-workflow-compensation-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-compensation-quarkus/pom.xml @@ -86,10 +86,6 @@ io.quarkus quarkus-resteasy-jackson - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files @@ -198,4 +194,4 @@ - \ No newline at end of file + diff --git a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/README.md b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/README.md index 84d174c315..96df5193e4 100644 --- a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/README.md +++ b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/README.md @@ -126,86 +126,6 @@ The workflow will consume the event and print the message you sent to the consol [ "Hello", "This has been injected by the event" ] ``` -### Running the example from Quarkus Dev UI - -This example can also be tested by using the `Kogito Serverless Workflows Tools` UI in the Quarkus Dev UI, to do so, just -start the example in Dev Mode: - -```sh -mvn clean package quarkus:dev -``` - -In the browser type to `http://localhost:8080/q/dev` show the Quarkus Dev UI, and then open the `Kogito Serverless Workflows Tools` -by clicking in `Workflow Instances`. - -![Quarkus Dev UI](docs/0_dev-ui.png) - -Once the `Workflow Instances` is opened, click on the `Workflow Definitions` tab. There you'll see the list of -workflows available in your project (in this example the table should display only the `start` workflow). -This screen allows you to start an instance of any of the workflows in the table. - -![Workflow Definitions Page](docs/1_workflow_definitions.png) - -To trigger the event that will initiate the workflow, just click the `Trigger Cloud Event` and you'll be forwarded to the -`Trigger Cloud Event` Page where a form will appear to fill in the event data. For this example use the following data: - -- Event Endpoint: - - method: "POST" - - path: "/startevent" -- Event type: "start" -- Event Source: <`any`> -- Business Key: "cloud-event-test" -- Custom Headers: <`empty - not required for this example`> -- Event Data: -```json -{ - "message": "Hello!" -} -``` - -And click on the `Trigger` button to trigger the event and start the workflow instance. - -![Cloud Event Form - New Workflow Instance](docs/2_start-cloud.event.png) - -If everything went well, a success notification message will appear that will let you go back to the -`Workflow Instances` Page. Once there you should be able to see that a new workflow instance in `Active` state waiting -for the `move` event to move forward. - -In order to trigger the event that will move the workflow, you can just click in the `Send Cloud Event` available in actions Kebab. - -![Active Workflow in Workflow Instances Page](docs/3_kebab-send-event.png) - -This again will open the `Trigger Cloud Event` Page, but in this case it's configured to notify the selected workflow instance. -Notice that there's no `Business Key` and it has the `Instance Id` field already filled with the right Id. -To trigger the `move` event, please fill the form with the following data: - -- Event Endpoint: - - method: "POST" - - path: "/" -- Event type: "move" -- Event Source: <`any`> -- Instance Id: <`leave current value`> -- Custom Headers: -- Event Data: -```json -{ - "move":"This has been injected by the event" -} -``` - -And click on the `Trigger` button to trigger the `move` event so the workflow can advance. - -> **Note:** -> This screen can also be accessed by clicking the `Trigger Cloud Event` button on the `Workflow Instances` page, but -> it'll require manually typing the `Instance Id`. - -![Cloud Event Form - Move Workflow Instance](docs/4_move-cloud-event.png) - -After the success message appears, if you go back to the `Workflow Instances` page you should see that the workflow -instance now appears in `Complete` state. - -![Completed Workflow in Workflow Instances Page](docs/5_workflow-completed.png) - ### Building and Deploying Workflow using CLI + Kogito Serverless Workflow Operator For this prepare your environment by following the instructions from [here](). diff --git a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/0_dev-ui.png b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/0_dev-ui.png deleted file mode 100644 index 5bd01d181e..0000000000 Binary files a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/0_dev-ui.png and /dev/null differ diff --git a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/1_workflow_definitions.png b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/1_workflow_definitions.png deleted file mode 100644 index 1487506689..0000000000 Binary files a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/1_workflow_definitions.png and /dev/null differ diff --git a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/2_start-cloud.event.png b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/2_start-cloud.event.png deleted file mode 100644 index d8fb62def4..0000000000 Binary files a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/2_start-cloud.event.png and /dev/null differ diff --git a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/3_kebab-send-event.png b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/3_kebab-send-event.png deleted file mode 100644 index db1db3a1b4..0000000000 Binary files a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/3_kebab-send-event.png and /dev/null differ diff --git a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/4_move-cloud-event.png b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/4_move-cloud-event.png deleted file mode 100644 index 95ccf6cddc..0000000000 Binary files a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/4_move-cloud-event.png and /dev/null differ diff --git a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/5_workflow-completed.png b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/5_workflow-completed.png deleted file mode 100644 index f9df988326..0000000000 Binary files a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/docs/5_workflow-completed.png and /dev/null differ diff --git a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/pom.xml index 99f2c875fd..5685dd8498 100644 --- a/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-consuming-events-over-http-quarkus/pom.xml @@ -82,10 +82,6 @@ io.quarkus quarkus-resteasy-jackson - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files @@ -171,4 +167,4 @@ - \ No newline at end of file + diff --git a/serverless-workflow-examples/serverless-workflow-correlation-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-correlation-quarkus/pom.xml index 108ef48941..600d024849 100644 --- a/serverless-workflow-examples/serverless-workflow-correlation-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-correlation-quarkus/pom.xml @@ -92,10 +92,6 @@ io.quarkus quarkus-smallrye-health - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-data-index-persistence-addon-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-data-index-persistence-addon-quarkus/pom.xml index 140acb90df..f6dcba17d0 100644 --- a/serverless-workflow-examples/serverless-workflow-data-index-persistence-addon-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-data-index-persistence-addon-quarkus/pom.xml @@ -76,10 +76,6 @@ org.kie kie-addons-quarkus-process-management - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-data-index-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-data-index-quarkus/pom.xml index 04ea1b8314..c48bd8ebdc 100644 --- a/serverless-workflow-examples/serverless-workflow-data-index-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-data-index-quarkus/pom.xml @@ -80,10 +80,6 @@ io.quarkus quarkus-smallrye-reactive-messaging-kafka - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - io.quarkus quarkus-junit5 diff --git a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/README.md b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/README.md new file mode 100644 index 0000000000..73a37c0470 --- /dev/null +++ b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/README.md @@ -0,0 +1,115 @@ +# Kogito Serverless Workflow - DMN Example + +## Description + +This example contains a simple workflow service that use DMN. +The services are described using JSON format as defined in the +[CNCF Serverless Workflow specification](https://github.com/serverlessworkflow/specification). + +The workflow expects as JSON input containing driver details and a traffic violation +(see details in the [Submit a request](#Submit-a-request) section). + +The workflow uses that input to execute a decision file which evaluates if the driver should be suspended or not. + +## Installing and Running + +### Prerequisites + +You will need: + - Java 17+ installed + - Environment variable JAVA_HOME set accordingly + - Maven 3.9.6+ installed + +When using native image compilation, you will also need: + - [GraalVm](https://www.graalvm.org/downloads/) 19.3.1+ installed + - Environment variable GRAALVM_HOME set accordingly + - Note that GraalVM native image compilation typically requires other packages (glibc-devel, zlib-devel and gcc) to be installed too. You also need 'native-image' installed in GraalVM (using 'gu install native-image'). Please refer to [GraalVM installation documentation](https://www.graalvm.org/docs/reference-manual/aot-compilation/#prerequisites) for more details. + +### Compile and Run in Local Dev Mode + +```sh +mvn clean package quarkus:dev +``` + +### Compile and Run in JVM mode + +```sh +mvn clean package +java -jar target/quarkus-app/quarkus-run.jar +``` + +or on windows + +```sh +mvn clean package +java -jar target\quarkus-app\quarkus-run.jar +``` + +### Compile and Run using Local Native Image +Note that this requires GRAALVM_HOME to point to a valid GraalVM installation + +```sh +mvn clean package -Pnative +``` + +To run the generated native executable, generated in `target/`, execute + +```sh +./target/serverless-workflow-dmn-quarkus-{version}-runner +``` + +## Example Usage + +Once the service is up and running, you can use the following example to interact with the service. + +### POST /Traffic Violation + +Returns penalty information from the given inputs -- driver and violation: + +Given inputs: + +```json +{ + "Driver":{"Points":2}, + "Violation":{ + "Type":"speed", + "Actual Speed":120, + "Speed Limit":100 + } +} +``` + +Curl command (using the JSON object above): + +```sh +curl -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -d '{"Driver":{"Points":2},"Violation":{"Type":"speed","Actual Speed":120,"Speed Limit":100}}' http://localhost:8080/traffic-violation +``` +or on Windows: + +```sh +curl -X POST -H "Accept: application/json" -H "Content-Type: application/json" -d "{\"Driver\":{\"Points\":2},\"Violation\":{\"Type\":\"speed\",\"Actual Speed\":120,\"Speed Limit\":100}}" http://localhost:8080/traffic-violation +``` + +As response, penalty information is returned. + +Example response: + +```json +{"workflowdata": + { + "Violation":{ + "Type":"speed", + "Speed Limit":100, + "Actual Speed":120 + }, + "Driver":{ + "Points":2 + }, + "Fine":{ + "Points":3, + "Amount":500 + }, + "Should the driver be suspended?":"No" + } +} +``` \ No newline at end of file diff --git a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/pom.xml b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/pom.xml similarity index 66% rename from kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/pom.xml rename to serverless-workflow-examples/serverless-workflow-dmn-quarkus/pom.xml index b3be304537..626db11bf3 100644 --- a/kogito-quarkus-examples/process-usertasks-with-security-oidc-quarkus-with-console/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/pom.xml @@ -1,4 +1,4 @@ - + + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 4.0.0 + org.kie.kogito.examples - kogito-quarkus-examples + serverless-workflow-examples-parent 999-SNAPSHOT + ../serverless-workflow-examples-parent/pom.xml - process-usertasks-with-security-oidc-quarkus-with-console - Kogito Example :: Process Usertasks Security OIDC Keycloak Quarkus :: Console - Kogito user tasks orchestration with security enabled on REST api - open id connect adapter(keycloak) + + org.kie.kogito.examples + serverless-workflow-dmn-quarkus + 1.0-SNAPSHOT + + Kogito Example :: Serverless Workflow :: DMN:: Quarkus + Kogito Serverless Workflow DMN Example - Quarkus 3.2.10.Final quarkus-bom @@ -38,8 +44,11 @@ org.kie.kogito kogito-bom 999-SNAPSHOT - 999-SNAPSHOT + 17 + 3.8.1 + 3.0.0-M7 + @@ -60,55 +69,29 @@ - org.jbpm - jbpm-with-drools-quarkus + org.apache.kie.sonataflow + sonataflow-quarkus io.quarkus quarkus-resteasy - io.quarkus - quarkus-resteasy-jackson - - - io.quarkus - quarkus-arc - - - io.quarkus - quarkus-oidc - - - - - org.kie - kie-addons-quarkus-persistence-infinispan + org.drools + drools-quarkus-decisions - - io.quarkus - quarkus-smallrye-reactive-messaging-kafka + org.kie.kogito + kogito-serverless-workflow-dmn-parser io.quarkus - quarkus-smallrye-openapi - - - - org.kie - kie-addons-quarkus-events-process + quarkus-resteasy-jackson org.kie - kie-addons-quarkus-process-management - - - - org.kie - kie-addons-quarkus-process-svg + kie-addons-quarkus-source-files - io.quarkus quarkus-junit5 @@ -119,29 +102,21 @@ rest-assured test - - org.keycloak - keycloak-core - test - - - org.kie.kogito - kogito-quarkus-test-utils - ${version.org.kie.kogito} - test - io.quarkus quarkus-smallrye-health - - org.kie - kie-addons-quarkus-source-files - ${project.artifactId} + + maven-compiler-plugin + ${version.compiler.plugin} + + ${maven.compiler.release} + + ${quarkus.platform.group-id} quarkus-maven-plugin @@ -154,6 +129,24 @@ + + maven-failsafe-plugin + ${version.failsafe.plugin} + + + org.jboss.logmanager.LogManager + ${maven.home} + + + + + + integration-test + verify + + + + @@ -174,5 +167,16 @@ + + native + + + native + + + + native + + diff --git a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/Traffic Violation.dmn b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/Traffic Violation.dmn new file mode 100644 index 0000000000..109d4689e1 --- /dev/null +++ b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/Traffic Violation.dmn @@ -0,0 +1,230 @@ + + + + + + string + + + number + + + string + + + string + + + number + + + + + string + + + date + + + string + + "speed", "parking", "driving under the influence" + + + + number + + + number + + + + + number + + + number + + + + + + + + + + + + + + Violation.Type + + + + + Violation.Actual Speed - Violation.Speed Limit + + + + + + + "speed" + + + [10..30) + + + 500 + + + 3 + + + + + "speed" + + + >= 30 + + + 1000 + + + 7 + + + + + "parking" + + + - + + + 100 + + + 1 + + + + + "driving under the influence" + + + - + + + 1000 + + + 5 + + + + + + + + + Should the driver be suspended due to points on his license? + "Yes", "No" + + + + + + + + + + + + Driver.Points + Fine.Points + + + + + if Total Points >= 20 then "Yes" else "No" + + + + + + + + + + 50.0 + 254.0 + 329.0 + 119.0 + 100.0 + 186.0 + + + 50.0 + 100.0 + 398.0 + + + 398.0 + + + 398.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/test/resources/application.properties b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/application.properties similarity index 64% rename from kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/test/resources/application.properties rename to serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/application.properties index ca5e657264..a67a411033 100644 --- a/kogito-springboot-examples/process-usertasks-with-security-oidc-springboot-with-console/src/test/resources/application.properties +++ b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/application.properties @@ -17,14 +17,13 @@ # under the License. # +quarkus.native.native-image-xmx=8g -spring.security.oauth2.resourceserver.jwt.issuer-uri=http://localhost:8480/auth/realms/kogito +quarkus.devservices.enabled=false -spring.main.allow-bean-definition-overriding=true - -server.address=0.0.0.0 - -# Kafka -spring.kafka.bootstrap-servers=localhost:9092 -spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer -spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer \ No newline at end of file +# profile to pack this example into a container, to use it execute activate the maven container profile, -Dcontainer +%container.quarkus.container-image.build=true +%container.quarkus.container-image.push=false +%container.quarkus.container-image.group=${USER} +%container.quarkus.container-image.registry=dev.local +%container.quarkus.container-image.tag=1.0-SNAPSHOT \ No newline at end of file diff --git a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/traffic violation.sw.json b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/traffic violation.sw.json new file mode 100644 index 0000000000..b1f615e480 --- /dev/null +++ b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/main/resources/traffic violation.sw.json @@ -0,0 +1,24 @@ +{ + "id" : "traffic-violation", + "name" : "traffic-violation", + "version" : "1_0", + "start" : "traffic-violation", + "functions" : [ { + "name" : "DMNTest", + "operation" : "dmn", + "type" : "custom", + "metadata" : { + "file" : "Traffic Violation.dmn", + "namespace" : "https://github.com/kiegroup/drools/kie-dmn/_A4BCA8B8-CF08-433F-93B2-A2598F19ECFF", + "model" : "Traffic Violation" + } + } ], + "states" : [ { + "actions" : [ { + "functionRef" : "DMNTest" + } ], + "name" : "traffic-violation", + "type" : "operation", + "end" : true + } ] +} \ No newline at end of file diff --git a/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/test/java/org/kie/kogito/examples/DMNGreetRestIT.java b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/test/java/org/kie/kogito/examples/DMNGreetRestIT.java new file mode 100644 index 0000000000..0d13fc98cc --- /dev/null +++ b/serverless-workflow-examples/serverless-workflow-dmn-quarkus/src/test/java/org/kie/kogito/examples/DMNGreetRestIT.java @@ -0,0 +1,53 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.kie.kogito.examples; + +import org.junit.jupiter.api.Test; + +import io.quarkus.test.junit.QuarkusIntegrationTest; +import io.restassured.http.ContentType; + +import static io.restassured.RestAssured.given; +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.Matchers.is; + +@QuarkusIntegrationTest +class DMNGreetRestIT { + @Test + public void testEvaluateTrafficViolation() { + given() + .body("{\n" + + " \"Driver\": {\n" + + " \"Points\": 2\n" + + " },\n" + + " \"Violation\": {\n" + + " \"Type\": \"speed\",\n" + + " \"Actual Speed\": 120,\n" + + " \"Speed Limit\": 100\n" + + " }\n" + + "}") + .contentType(ContentType.JSON) + .when() + .post("/Traffic Violation") + .then() + .statusCode(200) + .body("'Should the driver be suspended?'", is("No")); + } + +} diff --git a/serverless-workflow-examples/serverless-workflow-error-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-error-quarkus/pom.xml index 9d57340daf..97d23c56f6 100644 --- a/serverless-workflow-examples/serverless-workflow-error-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-error-quarkus/pom.xml @@ -80,10 +80,6 @@ io.quarkus quarkus-resteasy-jackson - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-events-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-events-quarkus/pom.xml index 5f3da1bf93..92be1acf81 100644 --- a/serverless-workflow-examples/serverless-workflow-events-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-events-quarkus/pom.xml @@ -93,10 +93,6 @@ com.fasterxml.jackson.core jackson-databind - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-marshallers-avro diff --git a/serverless-workflow-examples/serverless-workflow-expression-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-expression-quarkus/pom.xml index a0459cb10e..c94c64df21 100644 --- a/serverless-workflow-examples/serverless-workflow-expression-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-expression-quarkus/pom.xml @@ -80,10 +80,6 @@ io.quarkus quarkus-resteasy-jackson - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-foreach-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-foreach-quarkus/pom.xml index 5ef3348ca2..237df306d0 100644 --- a/serverless-workflow-examples/serverless-workflow-foreach-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-foreach-quarkus/pom.xml @@ -85,10 +85,6 @@ io.quarkus quarkus-resteasy-jackson - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/pom.xml index 464b455b1c..5f36277ba7 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-functions-events-quarkus/pom.xml @@ -108,10 +108,6 @@ io.quarkus quarkus-smallrye-health - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-functions-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-functions-quarkus/pom.xml index 25f51fbef8..b6108c011c 100644 --- a/serverless-workflow-examples/serverless-workflow-functions-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-functions-quarkus/pom.xml @@ -95,10 +95,6 @@ io.quarkus quarkus-smallrye-health - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-greeting-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-greeting-quarkus/pom.xml index 7e28cb9f0b..007f3b2983 100644 --- a/serverless-workflow-examples/serverless-workflow-greeting-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-greeting-quarkus/pom.xml @@ -84,10 +84,6 @@ io.quarkus quarkus-jsonp - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-client-rpc-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-client-rpc-quarkus/pom.xml index eb1e2627a9..08e0433205 100644 --- a/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-client-rpc-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-greeting-rpc-quarkus/serverless-workflow-greeting-client-rpc-quarkus/pom.xml @@ -93,10 +93,6 @@ io.quarkus quarkus-smallrye-health - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files @@ -187,4 +183,4 @@ - \ No newline at end of file + diff --git a/serverless-workflow-examples/serverless-workflow-hello-world/pom.xml b/serverless-workflow-examples/serverless-workflow-hello-world/pom.xml index 89cf971118..ce8f9bb3e8 100644 --- a/serverless-workflow-examples/serverless-workflow-hello-world/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-hello-world/pom.xml @@ -88,10 +88,6 @@ io.quarkus quarkus-arc - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/README.md b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/README.md index 1fc2525057..4156b87d1c 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/README.md +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/README.md @@ -22,12 +22,6 @@ This example demonstrates a few features powered by the Kogito implementation of In a Knative environment, the services involved in this use case can be scaled to zero and resume from the exact stage it was, saving cluster resources in the process. -## Using Quarkus Dev Services - -You can use the Workflow Instance management dev service when in Quarkus Dev Mode (`quarkus dev` from the [subscription-flow](subscription-flow) module root) to visualize the details of a given workflow instance: - -![Quarkus Dev UI](docs/dev-console.png) - ## The User Interface The [Newsletter Subscription Flow](subscription-flow) application has a user interface to interact with the workflow without having to rely on the command line to push events or making HTTP requests: diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/docs/dev-console.png b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/docs/dev-console.png deleted file mode 100644 index 53f288e7d4..0000000000 Binary files a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/docs/dev-console.png and /dev/null differ diff --git a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/pom.xml b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/pom.xml index ef56a59c80..9fa02d38fb 100644 --- a/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-newsletter-subscription/subscription-flow/pom.xml @@ -100,11 +100,6 @@ kie-addons-quarkus-events-process - - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/currency-exchange-workflow/pom.xml b/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/currency-exchange-workflow/pom.xml index b133699a4c..7a89b9dda4 100644 --- a/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/currency-exchange-workflow/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-oauth2-orchestration-quarkus/currency-exchange-workflow/pom.xml @@ -86,10 +86,6 @@ org.apache.kie.sonataflow sonataflow-quarkus - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-openvino-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-openvino-quarkus/pom.xml index ff747c52cc..0a2b539737 100644 --- a/serverless-workflow-examples/serverless-workflow-openvino-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-openvino-quarkus/pom.xml @@ -86,10 +86,6 @@ io.quarkus quarkus-resteasy-jackson - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-order-processing/pom.xml b/serverless-workflow-examples/serverless-workflow-order-processing/pom.xml index 057f0882de..f27ef0b587 100644 --- a/serverless-workflow-examples/serverless-workflow-order-processing/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-order-processing/pom.xml @@ -90,10 +90,6 @@ io.quarkus quarkus-smallrye-health - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-python-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-python-quarkus/pom.xml index 55dacffb77..b33d7e84c7 100644 --- a/serverless-workflow-examples/serverless-workflow-python-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-python-quarkus/pom.xml @@ -86,10 +86,6 @@ io.quarkus quarkus-resteasy-jackson - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/pom.xml b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/pom.xml index 4110defc0d..fb270ff0e3 100644 --- a/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-qas-service-showcase/query-answer-service/pom.xml @@ -77,10 +77,6 @@ org.apache.kie.sonataflow sonataflow-quarkus - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-saga-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-saga-quarkus/pom.xml index 4cb7ae9bac..2c16303933 100644 --- a/serverless-workflow-examples/serverless-workflow-saga-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-saga-quarkus/pom.xml @@ -79,10 +79,6 @@ io.quarkus quarkus-resteasy-jackson - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/pom.xml b/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/pom.xml index 306771ae84..336ec68ad8 100644 --- a/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-service-calls-quarkus/pom.xml @@ -89,10 +89,6 @@ io.quarkus quarkus-smallrye-health - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/pom.xml b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/pom.xml index 090b25db6a..aae32574ab 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-full/pom.xml @@ -82,10 +82,6 @@ io.quarkus quarkus-smallrye-health - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/pom.xml b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/pom.xml index 1562cc5fbd..e70e0e7f6b 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-function/pom.xml @@ -82,10 +82,6 @@ io.quarkus quarkus-smallrye-health - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/pom.xml b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/pom.xml index ccde440bf8..092ed723a3 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow-spec/pom.xml @@ -82,10 +82,6 @@ io.quarkus quarkus-smallrye-health - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/pom.xml b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/pom.xml index c4feb2a57f..4bbe2751c3 100644 --- a/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-temperature-conversion/conversion-workflow/pom.xml @@ -78,10 +78,6 @@ io.quarkus quarkus-smallrye-health - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-testing-with-rest-assured/pom.xml b/serverless-workflow-examples/serverless-workflow-testing-with-rest-assured/pom.xml index f91411f15f..0fb88a619e 100644 --- a/serverless-workflow-examples/serverless-workflow-testing-with-rest-assured/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-testing-with-rest-assured/pom.xml @@ -86,10 +86,6 @@ io.quarkus quarkus-resteasy - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/README.md b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/README.md index 588cf90386..d35f2e8260 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/README.md +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/README.md @@ -208,8 +208,3 @@ Additionally, the Quarkus Dev UI will be available at http://localhost:8080/q/de #### Dev UI Main View ![](docs/DevUIGeneral.png) - -#### Dev UI Serverless Workflow Tools View - -![](docs/DevUIWorkflows.png) - diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/docs/DevUIWorkflows.png b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/docs/DevUIWorkflows.png deleted file mode 100644 index 4cf5cdc3eb..0000000000 Binary files a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/docs/DevUIWorkflows.png and /dev/null differ diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/pom.xml b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/pom.xml index 6e54700896..0b4558c174 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-embedded/pom.xml @@ -103,10 +103,6 @@ org.apache.kie.sonataflow sonataflow-quarkus - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/pom.xml b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/pom.xml index 329beb51ac..5464bb262b 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/pom.xml +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-extended/pom.xml @@ -104,10 +104,6 @@ org.kie kogito-addons-quarkus-fabric8-kubernetes-service-catalog - - org.apache.kie.sonataflow - sonataflow-quarkus-devui - org.kie kie-addons-quarkus-source-files diff --git a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/README.md b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/README.md index adab503d19..b5d75d0403 100644 --- a/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/README.md +++ b/serverless-workflow-examples/serverless-workflow-timeouts-showcase-operator-devprofile/README.md @@ -251,10 +251,6 @@ firefox $EVENT_STATE_TIMEOUTS_ROOT/q/dev ```shell firefox $WORKFLOW_TIMEOUTS_ROOT/q/dev ``` -#### Dev UI SonataFlow Tools View - -![](docs/DevUIWorkflows.png) - #### Dev UI SonataFlow Data Index View ![](docs/DevUIDataIndex.png)