diff --git a/.github/workflows/forms-flow-data-analysis-api-cd.yml b/.github/workflows/forms-flow-data-analysis-api-cd.yml
index 55c900305b..b66c766fe4 100644
--- a/.github/workflows/forms-flow-data-analysis-api-cd.yml
+++ b/.github/workflows/forms-flow-data-analysis-api-cd.yml
@@ -104,10 +104,6 @@ jobs:
env:
SNYK_TOKEN: ${{ secrets.SNYK_TOKEN }}
- - name: Upload Snyk report as sarif 📦
- uses: github/codeql-action/upload-sarif@v2
- with:
- sarif_file: snyk.sarif
#####
# - name: Set up AWS CLI
# uses: aws-actions/configure-aws-credentials@v1
@@ -124,4 +120,4 @@ jobs:
# run: aws eks update-kubeconfig --region ca-central-1 --name formsflow-eks-qa
# - name: Deploy to eks
# run: |
-# kubectl -n dev patch deployment forms-flow-data-analysis-api -p '{"spec":{"template":{"spec":{"containers":[{"name":"forms-flow-data-analysis-api","image":"docker.io/formsflow/forms-flow-data-analysis-api:${{ env.VERSION }}"}]}}}}'
\ No newline at end of file
+# kubectl -n dev patch deployment forms-flow-data-analysis-api -p '{"spec":{"template":{"spec":{"containers":[{"name":"forms-flow-data-analysis-api","image":"docker.io/formsflow/forms-flow-data-analysis-api:${{ env.VERSION }}"}]}}}}'
diff --git a/.github/workflows/forms-flow-data-analysis-api-ci.yml b/.github/workflows/forms-flow-data-analysis-api-ci.yml
index 47abc50da5..57835dce1b 100644
--- a/.github/workflows/forms-flow-data-analysis-api-ci.yml
+++ b/.github/workflows/forms-flow-data-analysis-api-ci.yml
@@ -29,7 +29,7 @@ jobs:
strategy:
matrix:
- python-version: [3.11.7]
+ python-version: [3.11.8]
steps:
- uses: actions/checkout@v2
diff --git a/.github/workflows/forms-flow-documents-ci.yml b/.github/workflows/forms-flow-documents-ci.yml
index 75092be498..b35ae77ed1 100644
--- a/.github/workflows/forms-flow-documents-ci.yml
+++ b/.github/workflows/forms-flow-documents-ci.yml
@@ -34,7 +34,7 @@ jobs:
strategy:
matrix:
- python-version: [3.12.1]
+ python-version: [3.12.2]
steps:
- uses: actions/checkout@v2
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 5ad6a0736b..f69889a875 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,6 +2,30 @@
Mark items as `Added`, `Changed`, `Fixed`, `Modified`, `Removed`, `Untested Features`, `Upcoming Features`, `Known Issues`
+## 5.3.1 - 2024-02-14
+
+`Fixed`
+
+**forms-flow-web**
+
+* Fixed task page infinity loading issue
+* Fixed task list filter API breaking on initial time
+* Fixed tenant based all tasks not showing issue
+
+**forms-flow-documents**
+
+* Fixed security vulnerabilities
+
+**forms-flow-data-analysis-api**
+
+* Fixed security vulnerabilities
+
+`Modified`
+
+**forms-flow-api**
+
+* Changes have been made to the Roles and Groups endpoint to accommodate modifications related to subgroups in Keycloak 23.
+
## 5.3.0 - 2023-11-24
`Added`
diff --git a/README.md b/README.md
index 10150b48ed..e1a0a7ace3 100644
--- a/README.md
+++ b/README.md
@@ -6,7 +6,7 @@
[](https://github.com/AOT-Technologies/forms-flow-ai/actions)
[](https://gitter.im/forms-flow-ai/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
[](https://stackoverflow.com/questions/tagged/formsflow.ai?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
-
+
[**formsflow.ai**](https://formsflow.ai/) is a Free, Open-Source, Low Code Development Platform for rapidly building powerful business applications. [**formsflow.ai**](https://formsflow.ai/) combines leading Open-Source applications including [form.io](https://form.io) forms, Camunda’s workflow engine, Keycloak’s security, and Redash’s data analytics into a seamless, integrated platform.
diff --git a/forms-flow-api/setup.cfg b/forms-flow-api/setup.cfg
index 454afb5a14..fed7cb5315 100644
--- a/forms-flow-api/setup.cfg
+++ b/forms-flow-api/setup.cfg
@@ -1,6 +1,6 @@
[metadata]
name = formsflow_api
-version = 5.3.0
+version = 5.3.1
author = aot-technologies
classifiers =
Development Status :: Production
diff --git a/forms-flow-api/src/formsflow_api/services/external/keycloak.py b/forms-flow-api/src/formsflow_api/services/external/keycloak.py
index a529a70eea..b5732af11e 100644
--- a/forms-flow-api/src/formsflow_api/services/external/keycloak.py
+++ b/forms-flow-api/src/formsflow_api/services/external/keycloak.py
@@ -90,7 +90,10 @@ def get_analytics_groups(self, page_no: int, limit: int):
for group in group_list_response:
if group["name"] == KEYCLOAK_DASHBOARD_BASE_GROUP:
- dashboard_group_list = list(group["subGroups"])
+ if group.get("subGroupCount", 0) > 0:
+ dashboard_group_list = self.get_subgroups(group["id"])
+ else:
+ dashboard_group_list = list(group["subGroups"])
return dashboard_group_list
def get_analytics_roles(self, page_no: int, limit: int):
@@ -166,6 +169,15 @@ def get_groups(self):
current_app.logger.debug("Groups %s", group_list_response)
return group_list_response
+ def get_subgroups(self, group_id):
+ """Return sub groups."""
+ current_app.logger.debug(f"Getting subgroups for groupID: {group_id}")
+ group_list_response = self.get_request(
+ url_path=f"groups/{group_id}/children?briefRepresentation=false"
+ )
+ current_app.logger.debug("Sub Groups %s", group_list_response)
+ return group_list_response
+
def get_roles(self, search: str = ""):
"""Return roles."""
current_app.logger.debug("Getting roles")
diff --git a/forms-flow-api/src/formsflow_api/services/factory/keycloak_group_service.py b/forms-flow-api/src/formsflow_api/services/factory/keycloak_group_service.py
index afea75a1a2..3eafea9fff 100644
--- a/forms-flow-api/src/formsflow_api/services/factory/keycloak_group_service.py
+++ b/forms-flow-api/src/formsflow_api/services/factory/keycloak_group_service.py
@@ -130,6 +130,16 @@ def add_description(self, data: Dict):
data.pop("description", None)
return data
+ def sub_groups(self, group_id, response):
+ """Fetch subgroups of the group if subGroupCount greater than 0."""
+ sub_group = self.client.get_subgroups(group_id)
+ for group in sub_group:
+ group = self.format_response(group)
+ response.append(group)
+ if group.get("subGroupCount", 0) > 0:
+ self.sub_groups(group.get("id"), response)
+ return response
+
def flat(self, data, response):
"""Flatten response to single list of dictionary.
@@ -139,10 +149,11 @@ def flat(self, data, response):
for group in data:
subgroups = group.pop("subGroups", data)
group = self.format_response(group)
+ response.append(group)
if subgroups == []:
- response.append(group)
+ if group.get("subGroupCount", 0) > 0:
+ response = self.sub_groups(group.get("id"), response)
elif subgroups != []:
- response.append(group)
self.flat(subgroups, response)
return response
diff --git a/forms-flow-data-analysis-api/model_training/requirements.txt b/forms-flow-data-analysis-api/model_training/requirements.txt
index 30a254b34c..e6bfe84456 100644
--- a/forms-flow-data-analysis-api/model_training/requirements.txt
+++ b/forms-flow-data-analysis-api/model_training/requirements.txt
@@ -1,5 +1,5 @@
NumPy==1.24.1
-Transformers==4.33.2
+Transformers==4.36.2
torch==1.13.1
scikit-learn==1.2.0
datasets==2.8.0
diff --git a/forms-flow-data-analysis-api/requirements.txt b/forms-flow-data-analysis-api/requirements.txt
index a07633fef0..4a072b9960 100644
--- a/forms-flow-data-analysis-api/requirements.txt
+++ b/forms-flow-data-analysis-api/requirements.txt
@@ -25,7 +25,7 @@ flask-jwt-oidc==0.3.0
flask-restx==1.1.0
fsspec==2023.9.1
gunicorn==21.2.0
-huggingface-hub==0.17.2
+huggingface-hub==0.19.4
idna==3.4
itsdangerous==2.1.2
joblib==1.3.2
@@ -57,10 +57,10 @@ spacy==2.3.9
srsly==1.0.7
sympy==1.12
thinc==7.4.6
-tokenizers==0.13.3
+tokenizers==0.15.2
torch==2.0.1
tqdm==4.66.1
-transformers==4.33.2
+transformers==4.36.2
typing_extensions==4.8.0
urllib3==2.0.7
wasabi==0.10.1
diff --git a/forms-flow-documents/Dockerfile-ARM64 b/forms-flow-documents/Dockerfile-ARM64
index 61be6485ea..c1c7990a93 100644
--- a/forms-flow-documents/Dockerfile-ARM64
+++ b/forms-flow-documents/Dockerfile-ARM64
@@ -1,5 +1,5 @@
#Author: Kurian Benoy
-FROM python:3.9-slim-buster
+FROM python:3.10.13-slim-bullseye
WORKDIR /forms-flow-documents/app
diff --git a/forms-flow-web-root-config/README.md b/forms-flow-web-root-config/README.md
index 3653ae60f7..315865dd78 100644
--- a/forms-flow-web-root-config/README.md
+++ b/forms-flow-web-root-config/README.md
@@ -57,11 +57,11 @@ is mentioned on the [link](../forms-flow-idm/keycloak/README.md#create-forms-flo
Variable name | Meaning | Possible values | Default value |
--- | --- |----------| ---
- `MF_FORMSFLOW_WEB_URL`:triangular_flag_on_post:| For running locally/ if have custom changes | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v5.3.0/forms-flow-web.gz.js`
For custom changes: `http://{your-ip-address}:3004/forms-flow-web.js` | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v5.3.0/forms-flow-nav.gz.js`
- `MF_FORMSFLOW_NAV_UR`:triangular_flag_on_post:|For custom implementation of Navbar component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-nav)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v5.3.0/forms-flow-nav.gz.js`
- `MF_FORMSFLOW_SERVICE_URL`:triangular_flag_on_post:|For custom implementation of Service component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-service)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v5.3.0/forms-flow-service.gz.js`
- `MF_FORMSFLOW_ADMIN_URL`:triangular_flag_on_post:|For custom implementation of Admin component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-admin)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v5.3.0/forms-flow-admin.gz.js`
- `MF_FORMSFLOW_THEME_URL`:triangular_flag_on_post:| For custom implementation of Theme component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-theme) | | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v5.3.0/forms-flow-theme.gz.js`
+ `MF_FORMSFLOW_WEB_URL`:triangular_flag_on_post:| For running locally/ if have custom changes | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v5.3.1/forms-flow-web.gz.js`
For custom changes: `http://{your-ip-address}:3004/forms-flow-web.js` | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-web@v5.3.1/forms-flow-nav.gz.js`
+ `MF_FORMSFLOW_NAV_UR`:triangular_flag_on_post:|For custom implementation of Navbar component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-nav)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v5.3.1/forms-flow-nav.gz.js`
+ `MF_FORMSFLOW_SERVICE_URL`:triangular_flag_on_post:|For custom implementation of Service component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-service)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v5.3.1/forms-flow-service.gz.js`
+ `MF_FORMSFLOW_ADMIN_URL`:triangular_flag_on_post:|For custom implementation of Admin component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-admin)| |`//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v5.3.1/forms-flow-admin.gz.js`
+ `MF_FORMSFLOW_THEME_URL`:triangular_flag_on_post:| For custom implementation of Theme component, refer [here](https://github.com/AOT-Technologies/forms-flow-ai-micro-front-ends/tree/main/forms-flow-theme) | | `//forms-flow-microfrontends.aot-technologies.com/forms-flow-nav@v5.3.1/forms-flow-theme.gz.js`
`NODE_ENV`| Define project level configuration | `development, test, production` | `production`
`FORMIO_DEFAULT_PROJECT_URL`:triangular_flag_on_post:|The URL of the form.io server| |`http://{your-ip-address}:3001`
`KEYCLOAK_WEB_CLIENTID`|Your Keycloak Client ID within the realm| eg. forms-flow-web | `forms-flow-web`
diff --git a/forms-flow-web/src/components/ServiceFlow/list/ServiceTaskListView.js b/forms-flow-web/src/components/ServiceFlow/list/ServiceTaskListView.js
index 46786c67dc..d78f49c560 100644
--- a/forms-flow-web/src/components/ServiceFlow/list/ServiceTaskListView.js
+++ b/forms-flow-web/src/components/ServiceFlow/list/ServiceTaskListView.js
@@ -73,15 +73,12 @@ const ServiceTaskListView = React.memo((props) => {
}
}, [dispatch, reqData]);
- const getTaskDetails = (taskId) => {
- if (taskId !== bpmTaskId) {
+
+
+ const getTaskDetails = (taskId) => {
dispatch(push(`${redirectUrl.current}task/${taskId}`));
- }
- };
+ };
- const handleViewDetails = (taskId) => {
- getTaskDetails(taskId);
- };
const handlePageChange = (pageNumber) => {
dispatch(setBPMTaskListActivePage(pageNumber));
dispatch(setBPMTaskLoader(true));
@@ -130,7 +127,7 @@ const ServiceTaskListView = React.memo((props) => {