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 @@ [![FormsFlow BPM CI](https://github.com/AOT-Technologies/forms-flow-ai/actions/workflows/forms-flow-bpm-ci.yml/badge.svg)](https://github.com/AOT-Technologies/forms-flow-ai/actions) [![Join the chat at https://gitter.im/forms-flow-ai/community](https://badges.gitter.im/forms-flow-ai/community.svg)](https://gitter.im/forms-flow-ai/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![Join the chat at https://stackoverflow.com/questions/tagged/formsflow.ai](https://img.shields.io/badge/ask%20-on%20%20stackoverflow-F47F24)](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) => {
handleViewDetails(task.id)} + onClick={() => getTaskDetails(task.id)} className="fw-normal handle-view-details" >{t("View Details")}
diff --git a/jobs/sentiment-analysis/requirements.txt b/jobs/sentiment-analysis/requirements.txt index 5886dd2e5c..7af8292d77 100644 --- a/jobs/sentiment-analysis/requirements.txt +++ b/jobs/sentiment-analysis/requirements.txt @@ -26,7 +26,7 @@ flask-jwt-oidc==0.3.0 flask-restx==1.1.0 fsspec==2023.6.0 gunicorn==20.1.0 -huggingface-hub==0.15.1 +huggingface-hub==0.19.4 idna==3.4 itsdangerous==2.1.2 joblib==1.3.0 @@ -58,10 +58,10 @@ spacy==2.3.9 srsly==1.0.6 sympy==1.12 thinc==7.4.6 -tokenizers==0.13.3 +tokenizers===0.15.2 torch==2.0.1 tqdm==4.65.0 -transformers==4.30.2 +transformers==4.36.2 typing_extensions==4.6.3 urllib3==2.0.7 wasabi==0.10.1