From e54e650fa39daab5fdc9d6e62b4978ee4fc4b856 Mon Sep 17 00:00:00 2001 From: Martin Weise <martin.weise@tuwien.ac.at> Date: Sun, 24 Nov 2024 21:30:28 +0000 Subject: [PATCH] Dev --- .docker/docker-compose.yml | 21 +- .docs/.swagger/api.base.yaml | 4 +- .docs/.swagger/api.yaml | 12 +- .docs/changelog.md | 22 +- .docs/index.md | 11 +- .docs/kubernetes.md | 2 +- .gitlab-ci.yml | 46 +- Makefile | 4 +- dbrepo-analyse-service/Pipfile | 2 +- dbrepo-analyse-service/Pipfile.lock | 971 +++--- .../lib/dbrepo-1.5.2.tar.gz | Bin 0 -> 39335 bytes dbrepo-data-service/pom.xml | 2 +- dbrepo-data-service/querystore/pom.xml | 4 +- dbrepo-data-service/report/pom.xml | 4 +- dbrepo-data-service/rest-service/pom.xml | 6 +- .../endpoint/TableEndpointUnitTest.java | 1 - .../tuwien/endpoint/ViewEndpointUnitTest.java | 1 - .../DatabaseServiceIntegrationTest.java | 3 +- .../service/SubsetServiceIntegrationTest.java | 1 - .../service/TableServiceIntegrationTest.java | 2 +- .../service/ViewServiceIntegrationTest.java | 5 +- dbrepo-data-service/services/pom.xml | 6 +- .../java/at/tuwien/mapper/DataMapper.java | 30 +- .../java/at/tuwien/mapper/MetadataMapper.java | 7 +- .../impl/AccessServiceMariaDbImpl.java | 2 +- .../impl/DatabaseServiceMariaDbImpl.java | 8 +- .../impl/SchemaServiceMariaDbImpl.java | 6 +- .../impl/SubsetServiceMariaDbImpl.java | 8 +- .../service/impl/TableServiceMariaDbImpl.java | 10 +- .../service/impl/ViewServiceMariaDbImpl.java | 5 - dbrepo-metadata-service/api/pom.xml | 6 +- dbrepo-metadata-service/entities/pom.xml | 4 +- dbrepo-metadata-service/oai/pom.xml | 4 +- dbrepo-metadata-service/pom.xml | 2 +- dbrepo-metadata-service/report/pom.xml | 4 +- dbrepo-metadata-service/repositories/pom.xml | 4 +- dbrepo-metadata-service/rest-service/pom.xml | 4 +- dbrepo-metadata-service/services/pom.xml | 4 +- .../java/at/tuwien/config/MetricsConfig.java | 9 +- dbrepo-metadata-service/test/pom.xml | 4 +- dbrepo-search-service/Pipfile | 2 +- dbrepo-search-service/Pipfile.lock | 847 +++-- dbrepo-search-service/init/Pipfile.lock | 827 +++-- .../init/lib/dbrepo-1.5.2.tar.gz | Bin 0 -> 39335 bytes dbrepo-search-service/lib/dbrepo-1.5.2.tar.gz | Bin 0 -> 39335 bytes dbrepo-ui/composables/upload-service.ts | 5 + dbrepo-upload-service/.gitignore | 2 + dbrepo-upload-service/mvnw | 310 ++ dbrepo-upload-service/mvnw.cmd | 182 ++ dbrepo-upload-service/pom.xml | 168 + dbrepo-upload-service/pre-create.sh | 45 + .../src/main/java/at/tuwien/Application.java | 13 + .../src/main/resources/application-local.yml | 82 + .../src/main/resources/application.yml | 84 + .../java/at/tuwien/config/GatewayConfig.java | 40 + .../java/at/tuwien/config/KeycloakConfig.java | 83 + .../java/at/tuwien/config/TusdConfig.java | 16 + .../at/tuwien/config/TusdContainerConfig.java | 71 + .../interceptor/KeycloakInterceptor.java | 61 + .../service/UploadServiceIntegrationTest.java | 138 + .../src/test/resources/application.properties | 23 + .../src/test/resources/init/dbrepo-realm.json | 2822 +++++++++++++++++ docker-compose.yml | 4 +- helm/dbrepo/Chart.yaml | 4 +- helm/dbrepo/README.md | 4 +- helm/dbrepo/templates/metadata-secret.yaml | 4 +- helm/dbrepo/templates/upload-configmap.yaml | 54 + helm/dbrepo/values.yaml | 26 +- install.sh | 20 +- lib/python/pyproject.toml | 4 +- lib/python/setup.py | 2 +- make/dev.mk | 1 + make/test.mk | 4 + sonar-project.properties | 2 +- 74 files changed, 5715 insertions(+), 1486 deletions(-) create mode 100644 dbrepo-analyse-service/lib/dbrepo-1.5.2.tar.gz create mode 100644 dbrepo-search-service/init/lib/dbrepo-1.5.2.tar.gz create mode 100644 dbrepo-search-service/lib/dbrepo-1.5.2.tar.gz create mode 100644 dbrepo-upload-service/.gitignore create mode 100755 dbrepo-upload-service/mvnw create mode 100644 dbrepo-upload-service/mvnw.cmd create mode 100644 dbrepo-upload-service/pom.xml create mode 100755 dbrepo-upload-service/pre-create.sh create mode 100644 dbrepo-upload-service/src/main/java/at/tuwien/Application.java create mode 100644 dbrepo-upload-service/src/main/resources/application-local.yml create mode 100644 dbrepo-upload-service/src/main/resources/application.yml create mode 100644 dbrepo-upload-service/src/test/java/at/tuwien/config/GatewayConfig.java create mode 100644 dbrepo-upload-service/src/test/java/at/tuwien/config/KeycloakConfig.java create mode 100644 dbrepo-upload-service/src/test/java/at/tuwien/config/TusdConfig.java create mode 100644 dbrepo-upload-service/src/test/java/at/tuwien/config/TusdContainerConfig.java create mode 100644 dbrepo-upload-service/src/test/java/at/tuwien/interceptor/KeycloakInterceptor.java create mode 100644 dbrepo-upload-service/src/test/java/at/tuwien/service/UploadServiceIntegrationTest.java create mode 100644 dbrepo-upload-service/src/test/resources/application.properties create mode 100644 dbrepo-upload-service/src/test/resources/init/dbrepo-realm.json create mode 100644 helm/dbrepo/templates/upload-configmap.yaml diff --git a/.docker/docker-compose.yml b/.docker/docker-compose.yml index 76788c4099..06e460ae35 100644 --- a/.docker/docker-compose.yml +++ b/.docker/docker-compose.yml @@ -111,7 +111,7 @@ services: restart: "no" container_name: dbrepo-metadata-service hostname: metadata-service - image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.5.0 + image: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.5.2 volumes: - "${SHARED_VOLUME:-/tmp}:/tmp" environment: @@ -174,7 +174,7 @@ services: restart: "no" container_name: dbrepo-analyse-service hostname: analyse-service - image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.5.0 + image: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.5.2 environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -229,7 +229,7 @@ services: restart: "no" container_name: dbrepo-search-db hostname: search-db - image: registry.datalab.tuwien.ac.at/dbrepo/search-db:1.5.0 + image: registry.datalab.tuwien.ac.at/dbrepo/search-db:1.5.2 healthcheck: test: curl -sSL localhost:9200/_plugins/_security/health | jq .status | grep UP interval: 10s @@ -253,7 +253,7 @@ services: restart: "no" container_name: dbrepo-search-service hostname: search-service - image: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.5.0 + image: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.5.2 environment: AUTH_SERVICE_CLIENT: ${AUTH_SERVICE_CLIENT:-dbrepo-client} AUTH_SERVICE_CLIENT_SECRET: ${AUTH_SERVICE_CLIENT_SECRET:-MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG} @@ -275,7 +275,7 @@ services: restart: "no" container_name: dbrepo-ui hostname: ui - image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.5.0 + image: registry.datalab.tuwien.ac.at/dbrepo/ui:1.5.2 environment: NUXT_PUBLIC_API_CLIENT: "${BASE_URL:-http://localhost}" NUXT_PUBLIC_API_SERVER: "${BASE_URL:-http://localhost}" @@ -345,7 +345,7 @@ services: init: true container_name: dbrepo-search-service-init hostname: search-service-init - image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.5.0 + image: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.5.2 environment: METADATA_SERVICE_ENDPOINT: ${METADATA_SERVICE_ENDPOINT:-http://metadata-service:8080} OPENSEARCH_HOST: ${OPENSEARCH_HOST:-search-db} @@ -400,7 +400,7 @@ services: restart: "no" container_name: dbrepo-dashboard-service hostname: dashboard-service - image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service:1.5.0 + image: registry.datalab.tuwien.ac.at/dbrepo/dashboard-service:1.5.2 ports: - "3000:3000" volumes: @@ -428,7 +428,7 @@ services: init: true container_name: dbrepo-storage-service-init hostname: storage-service-init - image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.5.0 + image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.5.2 environment: WEED_CLUSTER_SW_MASTER: "${STORAGE_SERVICE_MASTER_ENDPOINT:-storage-service:9333}" S3_BUCKET: "${S3_BUCKET:-dbrepo}" @@ -443,10 +443,13 @@ services: container_name: dbrepo-upload-service hostname: upload-service image: docker.io/tusproject/tusd:v2.4.0 + volumes: + - "./config/pre-create.sh:/srv/tusd-hooks/pre-create:ro" command: - "-behind-proxy" - "-max-size=2000000000" - "-base-path=/api/upload/files/" + - "-hooks-dir=/srv/tusd-hooks/" - "-s3-endpoint=${STORAGE_ENDPOINT:-http://storage-service:9000}" - "-s3-bucket=dbrepo" environment: @@ -468,7 +471,7 @@ services: restart: "no" container_name: dbrepo-data-service hostname: data-service - image: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.5.0 + image: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.5.2 volumes: - "${SHARED_VOLUME:-/tmp}:/tmp" environment: diff --git a/.docs/.swagger/api.base.yaml b/.docs/.swagger/api.base.yaml index b7bd0570ee..d5fadcf597 100644 --- a/.docs/.swagger/api.base.yaml +++ b/.docs/.swagger/api.base.yaml @@ -11,7 +11,7 @@ components: type: http externalDocs: description: Project Website - url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.7/ + url: https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/ info: contact: email: andreas.rauber@tuwien.ac.at @@ -24,7 +24,7 @@ info: name: Apache 2.0 url: https://www.apache.org/licenses/LICENSE-2.0 title: DBRepo REST API - version: 1.4.7 + version: 1.5.2 openapi: 3.1.0 servers: - description: Test Instance diff --git a/.docs/.swagger/api.yaml b/.docs/.swagger/api.yaml index 1857e4bb3f..132f481c0e 100644 --- a/.docs/.swagger/api.yaml +++ b/.docs/.swagger/api.yaml @@ -16,7 +16,7 @@ info: name: Apache 2.0 url: 'https://www.apache.org/licenses/LICENSE-2.0' title: DBRepo REST API - version: 1.4.7 + version: 1.5.2 servers: - description: Test Instance url: 'https://test.dbrepo.tuwien.ac.at' @@ -24,7 +24,7 @@ servers: url: 'http://localhost' externalDocs: description: Project Website - url: 'https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.4.7/' + url: 'https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/' paths: /api/analyse/datatypes: get: @@ -8499,14 +8499,14 @@ components: type: string resumptionToken: type: string - parametersString: - type: string fromDate: type: string format: date-time untilDate: type: string format: date-time + parametersString: + type: string BannerMessageDto: required: - id @@ -8837,12 +8837,12 @@ components: type: string identifier: $ref: '#/components/schemas/Identifier' - apaName: - type: string bibtexName: type: string ieeeName: type: string + apaName: + type: string DataType: type: object properties: diff --git a/.docs/changelog.md b/.docs/changelog.md index 075bde6045..9b555ce4f0 100644 --- a/.docs/changelog.md +++ b/.docs/changelog.md @@ -2,7 +2,23 @@ author: Martin Weise --- -## v1.5.1 (2024-11-07) +## v1.5.2 (2024-11-19) + +[:simple-gitlab: GitLab Release](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/tags/v1.5.2) + +### What's Changed + +#### Changes + +* Require authentication for uploading files + in [#466](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues/466). + +#### Fixes + +* Fixed the `dist.tar.gz` file not being found in the CI/CD pipeline on `release-` branches + in [#465](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues/465). + +## v1.5.1 (2024-11-09) [:simple-gitlab: GitLab Release](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/tags/v1.5.1) @@ -10,7 +26,9 @@ author: Martin Weise #### Fixes -* Bug where the schema could not be created manually +* Bug where the data volume could not be calculated when the data length column in the Metadata Database is `null` + in [#462](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues/462). +* Bug where the schema could not be created manually in [#461](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues/461). ## v1.5.0 (2024-11-06) diff --git a/.docs/index.md b/.docs/index.md index cb86ce7e69..8265da0102 100644 --- a/.docs/index.md +++ b/.docs/index.md @@ -14,7 +14,7 @@ author: Martin Weise   -Documentation for version: [v1.5.1](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/releases). +Documentation for version: [v1.5.2](https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/releases). DBRepo is a repository for data in databases that are used from the beginning until the end of a research project supporting data evolution, -citation and -versioning. It implements the query store of the @@ -37,8 +37,8 @@ Installing DBRepo is very easy or ## Who is using DBRepo? - [TU Wien](https://dbrepo1.ec.tuwien.ac.at) -- TU Graz -- TU Darmstadt +- [TU Graz](https://dbrepo.cyverse.at) +- [TU Darmstadt](https://tudatabases.ulb.tu-darmstadt.de) - [Universität Hamburg](https://dbrepo.fdm.uni-hamburg.de/) - [Universiti Teknikal Malaysia Melaka](https://dbrepo.utem.edu.my/) - University of the Philippines @@ -46,4 +46,7 @@ Installing DBRepo is very easy or ## How can I try DBRepo? -[:fontawesome-solid-flask: Demonstration Instance](https://test.dbrepo.tuwien.ac.at){ .md-button .md-button--primary target="_blank" } \ No newline at end of file +There's a hosted [demo environment](https://test.dbrepo.tuwien.ac.at) maintained +by [DS-IFS](https://informatics.tuwien.ac.at/orgs/e194-04) where you can explore DBRepo without installing it locally. + +[:fontawesome-solid-flask: Demo Environment](https://test.dbrepo.tuwien.ac.at){ .md-button .md-button--primary target="_blank" } \ No newline at end of file diff --git a/.docs/kubernetes.md b/.docs/kubernetes.md index 6e66817d98..150e3ffb5e 100644 --- a/.docs/kubernetes.md +++ b/.docs/kubernetes.md @@ -13,7 +13,7 @@ helm upgrade --install dbrepo \ -n dbrepo \ "oci://registry.datalab.tuwien.ac.at/dbrepo/helm/dbrepo" \ --values ./values.yaml \ - --version "1.5.1" \ + --version "1.5.2" \ --create-namespace \ --cleanup-on-fail ``` diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index f5e9481013..3a5d8368d1 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -4,8 +4,8 @@ variables: TESTCONTAINERS_RYUK_DISABLED: "false" PYTHON_VERSION: "3.11" DOC_VERSION: "1.5" - APP_VERSION: "1.5.1" - CHART_VERSION: "1.5.1" + APP_VERSION: "1.5.2" + CHART_VERSION: "1.5.2" CACHE_FALLBACK_KEY: ${CI_DEFAULT_BRANCH} # This will supress any download for dependencies and plugins or upload messages which would clutter the console log. # `showDateTime` will show the passed time in milliseconds. You need to specify `--batch-mode` to make this work. @@ -104,12 +104,13 @@ build-search-service: build-docker: image: docker.io/docker:24-dind stage: build + variables: + DOCKER_BUILDKIT: 0 before_script: + - "apk add --no-cache make" - echo "$CI_REGISTRY_PASSWORD" | docker login --username "$CI_REGISTRY_USER" --password-stdin $CI_REGISTRY_URL script: - - "docker build -t dbrepo-metadata-service:build --target build dbrepo-metadata-service" - - "docker build -t dbrepo-data-service:build --target build dbrepo-data-service" - - "docker compose build --parallel" + - "make build-images" build-helm: image: docker.io/docker:24-dind @@ -161,10 +162,21 @@ verify-install-script: - /^release-.*/ variables: SKIP_CHECKS: 1 + before_script: + - "apk add bash curl" + script: + - "curl -sSL https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/raw/release-${DOC_VERSION}/install.sh | bash | grep 'Success!'" + +verify-dist: + image: docker.io/alpine:3.20 + stage: verify + only: + refs: + - /^release-.*/ + before_script: + - "apk add curl" script: - - apk add bash curl - - bash install.sh - - exit 0 + - "curl -v --output /dev/null --fail https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/${APP_VERSION}/dist.tar.gz" lint-helm-chart: image: docker.io/alpine:3.20 @@ -218,6 +230,12 @@ test-data-service: junit: ./dbrepo-data-service/rest-service/target/surefire-reports/TEST-*.xml coverage: '/Total.*?([0-9]{1,3})%/' +test-upload-service: + image: maven:3-openjdk-17 + stage: test + script: + - "mvn -f ./dbrepo-upload-service/pom.xml clean test $MAVEN_OPTS" + test-analyse-service: image: docker.io/python:3.11-alpine stage: test @@ -325,7 +343,7 @@ test-ui: dependencies: - build-ui before_script: - - "apk add bash apache2-utils" + - "apk add --no-cache bash apache2-utils" - "docker compose build dbrepo-ui" - "docker run --name dbrepo-ui -e NODE_OPTIONS='--max_old_space_size=256' -p 3000:3000 -d dbrepo-ui:latest" script: @@ -382,7 +400,7 @@ release-images: - "docker logout ${CI_REGISTRY2_URL}" - "echo ${CI_REGISTRY2_PASSWORD} | docker login --username ${CI_REGISTRY2_USER} --password-stdin ${CI_REGISTRY2_URL}" - "ifconfig eth0 mtu 1450 up" - - "apk add make bash" + - "apk add --no-cache make bash" script: - "make release-images" @@ -393,6 +411,10 @@ release-helm: refs: - /^release-.*/ when: manual + needs: + - build-helm + dependencies: + - build-helm before_script: - "docker logout ${CI_REGISTRY_URL}" - "echo ${CI_REGISTRY_PASSWORD} | docker login --username ${CI_REGISTRY_USER} --password-stdin ${CI_REGISTRY_URL}" @@ -427,7 +449,7 @@ release-docs: - "cp .docs/.swagger/swagger-ui.html ./final/${DOC_VERSION}/rest/index.html" # swagger - "cp .docs/.swagger/custom.css ./final/${DOC_VERSION}/rest/custom.css" # swagger - "cp -r ./site/* ./final/${DOC_VERSION}" # mkdocs - - "cp .docker/dist.tar.gz ./final/${DOC_VERSION}/dist.tar.gz" # dist + - "cp .docker/dist.tar.gz ./final/${APP_VERSION}/dist.tar.gz" # dist - "cp .docs/redirect.html ./final/${APP_VERSION}/index.html" # redirect patch docs - "bash ./.gitlab/gen-badge.sh" - eval $(ssh-agent -s) @@ -439,7 +461,7 @@ release-docs: - "scp -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa final.tar.gz $CI_DOC_USER@$CI_DOC_IP:final.tar.gz" - "scp -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa versions.json $CI_DOC_USER@$CI_DOC_IP:/system/user/ifs/infrastructures/public_html/dbrepo/versions.json" - "scp -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa .docs/redirect.html $CI_DOC_USER@$CI_DOC_IP:/system/user/ifs/infrastructures/public_html/dbrepo/index.html" - - 'ssh -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa $CI_DOC_USER@$CI_DOC_IP "rm -rf /system/user/ifs/infrastructures/public_html/dbrepo/${DOC_VERSION}; tar xzf ./final.tar.gz; rm -f ./final.tar.gz; cp -r ./final /system/user/ifs/infrastructures/public_html/dbrepo/${DOC_VERSION}; rm -rf ./final"' + - 'ssh -oHostKeyAlgorithms=+ssh-rsa -oPubkeyAcceptedAlgorithms=+ssh-rsa $CI_DOC_USER@$CI_DOC_IP "rm -rf /system/user/ifs/infrastructures/public_html/dbrepo/${DOC_VERSION}; tar xzf ./final.tar.gz; rm -f ./final.tar.gz; cp -r ./final/* /system/user/ifs/infrastructures/public_html/dbrepo; rm -rf ./final"' release-libs: stage: release diff --git a/Makefile b/Makefile index d1152b6c47..91994bda3b 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ .PHONY: all -APP_VERSION ?= 1.5.1 -CHART_VERSION ?= 1.5.1 +APP_VERSION ?= 1.5.2 +CHART_VERSION ?= 1.5.2 REPOSITORY_URL ?= registry.datalab.tuwien.ac.at/dbrepo .PHONY: all diff --git a/dbrepo-analyse-service/Pipfile b/dbrepo-analyse-service/Pipfile index 92babfc950..150d5811a6 100644 --- a/dbrepo-analyse-service/Pipfile +++ b/dbrepo-analyse-service/Pipfile @@ -21,7 +21,7 @@ numpy = "*" pandas = "*" minio = "*" pydantic = "*" -dbrepo = {path = "./lib/dbrepo-1.5.1.tar.gz"} +dbrepo = {path = "./lib/dbrepo-1.5.2.tar.gz"} opensearch-py = "*" [dev-packages] diff --git a/dbrepo-analyse-service/Pipfile.lock b/dbrepo-analyse-service/Pipfile.lock index 2e085f73ec..b63ee92806 100644 --- a/dbrepo-analyse-service/Pipfile.lock +++ b/dbrepo-analyse-service/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "709cb1821cee885939edb97b82142e417a8afc795f07ca9fdb569ce7ce82e565" + "sha256": "3df8e885e462132896bafc8d6c82c70226fc2352f2088eac67186d3e171b8308" }, "pipfile-spec": 6, "requires": { @@ -26,100 +26,85 @@ }, "aiohttp": { "hashes": [ - "sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138", - "sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c", - "sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24", - "sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480", - "sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2", - "sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5", - "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a", - "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8", - "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf", - "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871", - "sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486", - "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9", - "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d", - "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb", - "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68", - "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1", - "sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d", - "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd", - "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1", - "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8", - "sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7", - "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959", - "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7", - "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42", - "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79", - "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38", - "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a", - "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8", - "sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8", - "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151", - "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6", - "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e", - "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7", - "sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce", - "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b", - "sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8", - "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628", - "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f", - "sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a", - "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7", - "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc", - "sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab", - "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b", - "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911", - "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9", - "sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572", - "sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554", - "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d", - "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257", - "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c", - "sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b", - "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742", - "sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090", - "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6", - "sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc", - "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142", - "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16", - "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a", - "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28", - "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e", - "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94", - "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026", - "sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb", - "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28", - "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9", - "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3", - "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f", - "sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983", - "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205", - "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f", - "sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa", - "sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c", - "sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2", - "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb", - "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67", - "sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762", - "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a", - "sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8", - "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a", - "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a", - "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc", - "sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91", - "sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23", - "sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527", - "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6", - "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c", - "sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7", - "sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f", - "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a", - "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092", - "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414" + "sha256:018f1b04883a12e77e7fc161934c0f298865d3a484aea536a6a2ca8d909f0ba0", + "sha256:01a8aca4af3da85cea5c90141d23f4b0eee3cbecfd33b029a45a80f28c66c668", + "sha256:04b0cc74d5a882c9dacaeeccc1444f0233212b6f5be8bc90833feef1e1ce14b9", + "sha256:0de6466b9d742b4ee56fe1b2440706e225eb48c77c63152b1584864a236e7a50", + "sha256:12724f3a211fa243570e601f65a8831372caf1a149d2f1859f68479f07efec3d", + "sha256:12e4d45847a174f77b2b9919719203769f220058f642b08504cf8b1cf185dacf", + "sha256:17829f37c0d31d89aa6b8b010475a10233774771f9b6dc2cc352ea4f8ce95d9a", + "sha256:1a17f6a230f81eb53282503823f59d61dff14fb2a93847bf0399dc8e87817307", + "sha256:1cf03d27885f8c5ebf3993a220cc84fc66375e1e6e812731f51aab2b2748f4a6", + "sha256:1fbf41a6bbc319a7816ae0f0177c265b62f2a59ad301a0e49b395746eb2a9884", + "sha256:2257bdd5cf54a4039a4337162cd8048f05a724380a2283df34620f55d4e29341", + "sha256:24054fce8c6d6f33a3e35d1c603ef1b91bbcba73e3f04a22b4f2f27dac59b347", + "sha256:241a6ca732d2766836d62c58c49ca7a93d08251daef0c1e3c850df1d1ca0cbc4", + "sha256:28c7af3e50e5903d21d7b935aceed901cc2475463bc16ddd5587653548661fdb", + "sha256:351849aca2c6f814575c1a485c01c17a4240413f960df1bf9f5deb0003c61a53", + "sha256:3ce18f703b7298e7f7633efd6a90138d99a3f9a656cb52c1201e76cb5d79cf08", + "sha256:3d1c9c15d3999107cbb9b2d76ca6172e6710a12fda22434ee8bd3f432b7b17e8", + "sha256:3dd3e7e7c9ef3e7214f014f1ae260892286647b3cf7c7f1b644a568fd410f8ca", + "sha256:43bfd25113c1e98aec6c70e26d5f4331efbf4aa9037ba9ad88f090853bf64d7f", + "sha256:43dd89a6194f6ab02a3fe36b09e42e2df19c211fc2050ce37374d96f39604997", + "sha256:481f10a1a45c5f4c4a578bbd74cff22eb64460a6549819242a87a80788461fba", + "sha256:4ba8d043fed7ffa117024d7ba66fdea011c0e7602327c6d73cacaea38abe4491", + "sha256:4bb7493c3e3a36d3012b8564bd0e2783259ddd7ef3a81a74f0dbfa000fce48b7", + "sha256:4c1a6309005acc4b2bcc577ba3b9169fea52638709ffacbd071f3503264620da", + "sha256:4dda726f89bfa5c465ba45b76515135a3ece0088dfa2da49b8bb278f3bdeea12", + "sha256:53c921b58fdc6485d6b2603e0132bb01cd59b8f0620ffc0907f525e0ba071687", + "sha256:5578cf40440eafcb054cf859964bc120ab52ebe0e0562d2b898126d868749629", + "sha256:59ee1925b5a5efdf6c4e7be51deee93984d0ac14a6897bd521b498b9916f1544", + "sha256:670847ee6aeb3a569cd7cdfbe0c3bec1d44828bbfbe78c5d305f7f804870ef9e", + "sha256:78c657ece7a73b976905ab9ec8be9ef2df12ed8984c24598a1791c58ce3b4ce4", + "sha256:7a9318da4b4ada9a67c1dd84d1c0834123081e746bee311a16bb449f363d965e", + "sha256:7b2f8107a3c329789f3c00b2daad0e35f548d0a55cda6291579136622099a46e", + "sha256:7ea4490360b605804bea8173d2d086b6c379d6bb22ac434de605a9cbce006e7d", + "sha256:8360c7cc620abb320e1b8d603c39095101391a82b1d0be05fb2225471c9c5c52", + "sha256:875f7100ce0e74af51d4139495eec4025affa1a605280f23990b6434b81df1bd", + "sha256:8bedb1f6cb919af3b6353921c71281b1491f948ca64408871465d889b4ee1b66", + "sha256:8d20cfe63a1c135d26bde8c1d0ea46fd1200884afbc523466d2f1cf517d1fe33", + "sha256:9202f184cc0582b1db15056f2225ab4c1e3dac4d9ade50dd0613ac3c46352ac2", + "sha256:9acfc7f652b31853eed3b92095b0acf06fd5597eeea42e939bd23a17137679d5", + "sha256:9d18a8b44ec8502a7fde91446cd9c9b95ce7c49f1eacc1fb2358b8907d4369fd", + "sha256:9e67531370a3b07e49b280c1f8c2df67985c790ad2834d1b288a2f13cd341c5f", + "sha256:9ee6a4cdcbf54b8083dc9723cdf5f41f722c00db40ccf9ec2616e27869151129", + "sha256:a7d9a606355655617fee25dd7e54d3af50804d002f1fd3118dd6312d26692d70", + "sha256:aa3705a8d14de39898da0fbad920b2a37b7547c3afd2a18b9b81f0223b7d0f68", + "sha256:b7215bf2b53bc6cb35808149980c2ae80a4ae4e273890ac85459c014d5aa60ac", + "sha256:badda65ac99555791eed75e234afb94686ed2317670c68bff8a4498acdaee935", + "sha256:bf0e6cce113596377cadda4e3ac5fb89f095bd492226e46d91b4baef1dd16f60", + "sha256:c171fc35d3174bbf4787381716564042a4cbc008824d8195eede3d9b938e29a8", + "sha256:c1f6490dd1862af5aae6cfcf2a274bffa9a5b32a8f5acb519a7ecf5a99a88866", + "sha256:c25b74a811dba37c7ea6a14d99eb9402d89c8d739d50748a75f3cf994cf19c43", + "sha256:c6095aaf852c34f42e1bd0cf0dc32d1e4b48a90bfb5054abdbb9d64b36acadcb", + "sha256:c63f898f683d1379b9be5afc3dd139e20b30b0b1e0bf69a3fc3681f364cf1629", + "sha256:cd8d62cab363dfe713067027a5adb4907515861f1e4ce63e7be810b83668b847", + "sha256:ce91a24aac80de6be8512fb1c4838a9881aa713f44f4e91dd7bb3b34061b497d", + "sha256:cea52d11e02123f125f9055dfe0ccf1c3857225fb879e4a944fae12989e2aef2", + "sha256:cf4efa2d01f697a7dbd0509891a286a4af0d86902fc594e20e3b1712c28c0106", + "sha256:d2fa6fc7cc865d26ff42480ac9b52b8c9b7da30a10a6442a9cdf429de840e949", + "sha256:d329300fb23e14ed1f8c6d688dfd867d1dcc3b1d7cd49b7f8c5b44e797ce0932", + "sha256:d6177077a31b1aecfc3c9070bd2f11419dbb4a70f30f4c65b124714f525c2e48", + "sha256:db37248535d1ae40735d15bdf26ad43be19e3d93ab3f3dad8507eb0f85bb8124", + "sha256:db70a47987e34494b451a334605bee57a126fe8d290511349e86810b4be53b01", + "sha256:dcefcf2915a2dbdbce37e2fc1622129a1918abfe3d06721ce9f6cdac9b6d2eaa", + "sha256:dda3ed0a7869d2fa16aa41f9961ade73aa2c2e3b2fcb0a352524e7b744881889", + "sha256:e0bf378db07df0a713a1e32381a1b277e62ad106d0dbe17b5479e76ec706d720", + "sha256:e13a05db87d3b241c186d0936808d0e4e12decc267c617d54e9c643807e968b6", + "sha256:e143b0ef9cb1a2b4f74f56d4fbe50caa7c2bb93390aff52f9398d21d89bc73ea", + "sha256:e22d1721c978a6494adc824e0916f9d187fa57baeda34b55140315fa2f740184", + "sha256:e5522ee72f95661e79db691310290c4618b86dff2d9b90baedf343fd7a08bf79", + "sha256:e993676c71288618eb07e20622572b1250d8713e7e00ab3aabae28cb70f3640d", + "sha256:ee9afa1b0d2293c46954f47f33e150798ad68b78925e3710044e0d67a9487791", + "sha256:f1ac5462582d6561c1c1708853a9faf612ff4e5ea5e679e99be36143d6eabd8e", + "sha256:f5022504adab881e2d801a88b748ea63f2a9d130e0b2c430824682a96f6534be", + "sha256:f5b973cce96793725ef63eb449adfb74f99c043c718acb76e0d2a447ae369962", + "sha256:f7c58a240260822dc07f6ae32a0293dd5bccd618bb2d0f36d51c5dbd526f89c0", + "sha256:fc6da202068e0a268e298d7cd09b6e9f3997736cd9b060e2750963754552a0a9", + "sha256:fdadc3f6a32d6eca45f9a900a254757fd7855dfb2d8f8dcf0e88f0fae3ff8eb1" ], - "markers": "python_version >= '3.8'", - "version": "==3.10.10" + "markers": "python_version >= '3.9'", + "version": "==3.11.7" }, "aiosignal": { "hashes": [ @@ -182,28 +167,28 @@ }, "blinker": { "hashes": [ - "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01", - "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83" + "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", + "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc" ], - "markers": "python_version >= '3.8'", - "version": "==1.8.2" + "markers": "python_version >= '3.9'", + "version": "==1.9.0" }, "boto3": { "hashes": [ - "sha256:82fa8cdb00731aeffe7a5829821ae78d75c7ae959b638c15ff3b4681192ace90", - "sha256:c7a0a0bc5ae3bed5d38e8bfe5a56b31621e79bdd7c1ea6e5ba4326d820cde3a5" + "sha256:091d6bed1422370987a839bff3f8755df7404fc15e9fac2a48e8505356f07433", + "sha256:9b26fa31901da7793c1dcd65eee9bab7e897d8aa1ffed0b5e1c3bce93d2aefe4" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==1.35.55" + "version": "==1.35.68" }, "botocore": { "hashes": [ - "sha256:3d54739e498534c9d7a6e9732ae2d17ed29c7d5e29fe36c956d8488b859538b0", - "sha256:61ae18f688250372d7b6046e35c86f8fd09a7c0f0064b52688f3490b4d6c9d6b" + "sha256:42c3700583a82f2b5316281a073d644a521d6358837e2b446dc458ba5d990fb4", + "sha256:599139d5564291f5be873800711f9e4e14a823395ae9ce7b142be775e9849b94" ], "markers": "python_version >= '3.8'", - "version": "==1.35.55" + "version": "==1.35.68" }, "certifi": { "hashes": [ @@ -440,9 +425,9 @@ }, "dbrepo": { "hashes": [ - "sha256:d60be1e9261bde6b9d4ebe5db46896b1bfaed918eff7b98194e4224d94511497" + "sha256:c215250a1e8e73febab17a31a7e7bc84b4c7aadde2508599be2eb4ec1ae17b5d" ], - "path": "./lib/dbrepo-1.5.1.tar.gz" + "path": "./lib/dbrepo-1.5.2.tar.gz" }, "events": { "hashes": [ @@ -468,12 +453,12 @@ }, "flask": { "hashes": [ - "sha256:34e815dfaa43340d1d15a5c3a02b8476004037eb4840b34910c6e21679d288f3", - "sha256:ceb27b0af3823ea2737928a4d99d125a06175b8512c445cbd9a9ce200ef76842" + "sha256:5f873c5184c897c8d9d1b05df1e3d01b14910ce69607a117bd3277098a5836ac", + "sha256:d667207822eb83f1c4b50949b1623c8fc8d51f2341d65f72e1a1815397551136" ], "index": "pypi", - "markers": "python_version >= '3.8'", - "version": "==3.0.3" + "markers": "python_version >= '3.9'", + "version": "==3.1.0" }, "flask-cors": { "hashes": [ @@ -493,12 +478,12 @@ }, "flask-jwt-extended": { "hashes": [ - "sha256:63a28fc9731bcc6c4b8815b6f954b5904caa534fc2ae9b93b1d3ef12930dca95", - "sha256:9215d05a9413d3855764bcd67035e75819d23af2fafb6b55197eb5a3313fdfb2" + "sha256:52f35bf0985354d7fb7b876e2eb0e0b141aaff865a22ff6cc33d9a18aa987978", + "sha256:8085d6757505b6f3291a2638c84d207e8f0ad0de662d1f46aa2f77e658a0c976" ], "index": "pypi", - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==4.6.0" + "markers": "python_version >= '3.9' and python_version < '4'", + "version": "==4.7.1" }, "frozenlist": { "hashes": [ @@ -600,48 +585,48 @@ }, "gevent": { "hashes": [ - "sha256:051b22e2758accfddb0457728bfc9abf8c3f2ce6bca43f1ff6e07b5ed9e49bf4", - "sha256:0de6eb3d55c03138fda567d9bfed28487ce5d0928c5107549767a93efdf2be26", - "sha256:18e6984ec96fc95fd67488555c38ece3015be1f38b1bcceb27b7d6c36b343008", - "sha256:1c3a828b033fb02b7c31da4d75014a1f82e6c072fc0523456569a57f8b025861", - "sha256:1ce6dab94c0b0d24425ba55712de2f8c9cb21267150ca63f5bb3a0e1f165da99", - "sha256:1e24ffea72e27987979c009536fd0868e52239b44afe6cf7135ce8aafd0f108e", - "sha256:26ca7a6b42d35129617025ac801135118333cad75856ffc3217b38e707383eba", - "sha256:34aea15f9c79f27a8faeaa361bc1e72c773a9b54a1996a2ec4eefc8bcd59a824", - "sha256:385710355eadecdb70428a5ae3e7e5a45dcf888baa1426884588be9d25ac4290", - "sha256:3ac83b74304487afa211a01909c7dd257e574db0cd429d866c298e21df7aeedf", - "sha256:3ad8fb70aa0ebc935729c9699ac31b210a49b689a7b27b7ac9f91676475f3f53", - "sha256:40ea3e40e8bb4fdb143c2a8edf2ccfdebd56016c7317c341ce8094c7bee08818", - "sha256:57a5c4e0bdac482c5f02f240d0354e61362df73501ef6ebafce8ef635cad7527", - "sha256:5d850a453d66336272be4f1d3a8126777f3efdaea62d053b4829857f91e09755", - "sha256:68c3a0d8402755eba7f69022e42e8021192a721ca8341908acc222ea597029b6", - "sha256:7021e26d70189b33c27173d4173f27bf4685d6b6f1c0ea50e5335f8491cb110c", - "sha256:70e9ed7ecb70e0df7dc97c3bc420de9a45a7c76bd5861c6cfec8c549700e681e", - "sha256:89c4115e3f5ada55f92b61701a46043fe42f702b5af863b029e4c1a76f6cc2d4", - "sha256:8af65a4d4feaec6042c666d22c322a310fba3b47e841ad52f724b9c3ce5da48e", - "sha256:8e58ee3723f1fbe07d66892f1caa7481c306f653a6829b6fd16cb23d618a5915", - "sha256:9ca2266e08f43c0e22c028801dff7d92a0b102ef20e4caeb6a46abfb95f6a328", - "sha256:9e1210334a9bc9f76c3d008e0785ca62214f8a54e1325f6c2ecab3b6a572a015", - "sha256:a9a89d6e396ef6f1e3968521bf56e8c4bee25b193bbf5d428b7782d582410822", - "sha256:aa7ee1bd5cabb2b7ef35105f863b386c8d5e332f754b60cfc354148bd70d35d1", - "sha256:b52382124eca13135a3abe4f65c6bd428656975980a48e51b17aeab68bdb14db", - "sha256:c1d80090485da1ea3d99205fe97908b31188c1f4857f08b333ffaf2de2e89d18", - "sha256:ce417bcaaab496bc9c77f75566531e9d93816262037b8b2dbb88b0fdcd66587c", - "sha256:d67daed8383326dc8b5e58d88e148d29b6b52274a489e383530b0969ae7b9cb9", - "sha256:d758f0d4dbf32502ec87bb9b536ca8055090a16f8305f0ada3ce6f34e70f2fd7", - "sha256:d7a1ad0f2da582f5bd238bca067e1c6c482c30c15a6e4d14aaa3215cbb2232f3", - "sha256:e534e6a968d74463b11de6c9c67f4b4bf61775fb00f2e6e0f7fcdd412ceade18", - "sha256:eb5edb6433764119a664bbb148d2aea9990950aa89cc3498f475c2408d523ea3", - "sha256:f0c129f81d60cda614acb4b0c5731997ca05b031fb406fcb58ad53a7ade53b13", - "sha256:f147e38423fbe96e8731f60a63475b3d2cab2f3d10578d8ee9d10c507c58a2ff", - "sha256:f18689f7a70d2ed0e75bad5036ec3c89690a493d4cfac8d7cdb258ac04b132bd", - "sha256:f2ae3efbbd120cdf4a68b7abc27a37e61e6f443c5a06ec2c6ad94c37cd8471ec", - "sha256:f4e526fdc279c655c1e809b0c34b45844182c2a6b219802da5e411bd2cf5a8ad", - "sha256:f7f4f171d4d2018170454d84c934842e1b5f6ce7468ba298f6e7f7cff15000a3" + "sha256:1c3443b0ed23dcb7c36a748d42587168672953d368f2956b17fad36d43b58836", + "sha256:1d4fadc319b13ef0a3c44d2792f7918cf1bca27cacd4d41431c22e6b46668026", + "sha256:1ea50009ecb7f1327347c37e9eb6561bdbc7de290769ee1404107b9a9cba7cf1", + "sha256:2142704c2adce9cd92f6600f371afb2860a446bfd0be5bd86cca5b3e12130766", + "sha256:351d1c0e4ef2b618ace74c91b9b28b3eaa0dd45141878a964e03c7873af09f62", + "sha256:356b73d52a227d3313f8f828025b665deada57a43d02b1cf54e5d39028dbcf8d", + "sha256:3d882faa24f347f761f934786dde6c73aa6c9187ee710189f12dcc3a63ed4a50", + "sha256:58851f23c4bdb70390f10fc020c973ffcf409eb1664086792c8b1e20f25eef43", + "sha256:68bee86b6e1c041a187347ef84cf03a792f0b6c7238378bf6ba4118af11feaae", + "sha256:7398c629d43b1b6fd785db8ebd46c0a353880a6fab03d1cf9b6788e7240ee32e", + "sha256:816b3883fa6842c1cf9d2786722014a0fd31b6312cca1f749890b9803000bad6", + "sha256:81d918e952954675f93fb39001da02113ec4d5f4921bf5a0cc29719af6824e5d", + "sha256:85329d556aaedced90a993226d7d1186a539c843100d393f2349b28c55131c85", + "sha256:8619d5c888cb7aebf9aec6703e410620ef5ad48cdc2d813dd606f8aa7ace675f", + "sha256:8bd1419114e9e4a3ed33a5bad766afff9a3cf765cb440a582a1b3a9bc80c1aca", + "sha256:92e0d7759de2450a501effd99374256b26359e801b2d8bf3eedd3751973e87f5", + "sha256:92fe5dfee4e671c74ffaa431fd7ffd0ebb4b339363d24d0d944de532409b935e", + "sha256:97e2f3999a5c0656f42065d02939d64fffaf55861f7d62b0107a08f52c984897", + "sha256:9d3b249e4e1f40c598ab8393fc01ae6a3b4d51fc1adae56d9ba5b315f6b2d758", + "sha256:a3d75fa387b69c751a3d7c5c3ce7092a171555126e136c1d21ecd8b50c7a6e46", + "sha256:a5f1701ce0f7832f333dd2faf624484cbac99e60656bfbb72504decd42970f0f", + "sha256:b24d800328c39456534e3bc3e1684a28747729082684634789c2f5a8febe7671", + "sha256:b5efe72e99b7243e222ba0c2c2ce9618d7d36644c166d63373af239da1036bab", + "sha256:b7bfcfe08d038e1fa6de458891bca65c1ada6d145474274285822896a858c870", + "sha256:beede1d1cff0c6fafae3ab58a0c470d7526196ef4cd6cc18e7769f207f2ea4eb", + "sha256:c6b775381f805ff5faf250e3a07c0819529571d19bb2a9d474bee8c3f90d66af", + "sha256:c9c935b83d40c748b6421625465b7308d87c7b3717275acd587eef2bd1c39546", + "sha256:ca845138965c8c56d1550499d6b923eb1a2331acfa9e13b817ad8305dde83d11", + "sha256:d618e118fdb7af1d6c1a96597a5cd6ac84a9f3732b5be8515c6a66e098d498b6", + "sha256:d6c0a065e31ef04658f799215dddae8752d636de2bed61365c358f9c91e7af61", + "sha256:d740206e69dfdfdcd34510c20adcb9777ce2cc18973b3441ab9767cd8948ca8a", + "sha256:d7886b63ebfb865178ab28784accd32f287d5349b3ed71094c86e4d3ca738af5", + "sha256:d9347690f4e53de2c4af74e62d6fabc940b6d4a6cad555b5a379f61e7d3f2a8e", + "sha256:d9ca80711e6553880974898d99357fb649e062f9058418a92120ca06c18c3c59", + "sha256:e24181d172f50097ac8fc272c8c5b030149b630df02d1c639ee9f878a470ba2b", + "sha256:ec68e270543ecd532c4c1d70fca020f90aa5486ad49c4f3b8b2e64a66f5c9274", + "sha256:f43f47e702d0c8e1b8b997c00f1601486f9f976f84ab704f8f11536e3fa144c9", + "sha256:ff96c5739834c9a594db0e12bf59cb3fa0e5102fc7b893972118a3166733d61c" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==24.10.3" + "version": "==24.11.1" }, "greenlet": { "hashes": [ @@ -857,12 +842,12 @@ }, "minio": { "hashes": [ - "sha256:418c31ac79346a580df04a0e14db1becbc548a6e7cca61f9bc4ef3bcd336c449", - "sha256:5961c58192b1d70d3a2a362064b8e027b8232688998a6d1251dadbb02ab57a7d" + "sha256:153582ed52ff3b5005ba558e1f25bfe1e9e834f7f0745e594777f28e3e81e1a0", + "sha256:4db95a21fe1e2022ec975292d8a1f83bd5b18f830d23d42a4518ac7a5281d7c5" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==7.2.10" + "version": "==7.2.11" }, "mistune": { "hashes": [ @@ -1043,11 +1028,11 @@ }, "packaging": { "hashes": [ - "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", - "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], "markers": "python_version >= '3.8'", - "version": "==24.1" + "version": "==24.2" }, "pandas": { "hashes": [ @@ -1274,115 +1259,126 @@ }, "pydantic": { "hashes": [ - "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f", - "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12" + "sha256:a4daca2dc0aa429555e0656d6bf94873a7dc5f54ee42b1f5873d666fb3f35560", + "sha256:a8d20db84de64cf4a7d59e899c2caf0fe9d660c7cfc482528e7020d7dd189a7e" ], "index": "pypi", "markers": "python_version >= '3.8'", - "version": "==2.9.2" + "version": "==2.10.1" }, "pydantic-core": { "hashes": [ - "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36", - "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05", - "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071", - "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327", - "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c", - "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36", - "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29", - "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744", - "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d", - "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec", - "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e", - "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e", - "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577", - "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232", - "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863", - "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6", - "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368", - "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480", - "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2", - "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2", - "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6", - "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769", - "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d", - "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2", - "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84", - "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166", - "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271", - "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5", - "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb", - "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13", - "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323", - "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556", - "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665", - "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef", - "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb", - "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119", - "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126", - "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510", - "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b", - "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87", - "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f", - "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc", - "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8", - "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21", - "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f", - "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6", - "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658", - "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b", - "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3", - "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb", - "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59", - "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24", - "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9", - "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3", - "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd", - "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753", - "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55", - "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad", - "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a", - "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605", - "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e", - "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b", - "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433", - "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8", - "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07", - "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728", - "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0", - "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327", - "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555", - "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64", - "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6", - "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea", - "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b", - "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df", - "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e", - "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd", - "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068", - "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3", - "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040", - "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12", - "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916", - "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f", - "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f", - "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801", - "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231", - "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5", - "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8", - "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee", - "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607" + "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9", + "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b", + "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c", + "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529", + "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc", + "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854", + "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d", + "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278", + "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a", + "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c", + "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f", + "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27", + "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f", + "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac", + "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2", + "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97", + "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a", + "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919", + "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9", + "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4", + "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c", + "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131", + "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5", + "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd", + "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089", + "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107", + "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6", + "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60", + "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf", + "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5", + "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08", + "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05", + "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2", + "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e", + "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c", + "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17", + "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62", + "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23", + "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be", + "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067", + "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02", + "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f", + "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235", + "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840", + "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5", + "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807", + "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16", + "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c", + "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864", + "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e", + "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a", + "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35", + "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737", + "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a", + "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3", + "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52", + "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05", + "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31", + "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89", + "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de", + "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6", + "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36", + "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c", + "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154", + "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb", + "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e", + "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd", + "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3", + "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f", + "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78", + "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960", + "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618", + "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08", + "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4", + "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c", + "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c", + "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330", + "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8", + "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792", + "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025", + "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9", + "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f", + "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01", + "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337", + "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4", + "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f", + "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd", + "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51", + "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab", + "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc", + "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676", + "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381", + "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed", + "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb", + "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967", + "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073", + "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae", + "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c", + "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206", + "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b" ], "markers": "python_version >= '3.8'", - "version": "==2.23.4" + "version": "==2.27.1" }, "pyjwt": { "hashes": [ - "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850", - "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c" + "sha256:543b77207db656de204372350926bed5a86201c4cbff159f623f79c7bb487a15", + "sha256:7628a7eb7938959ac1b26e819a1df0fd3259505627b575e4bad6d08f76db695c" ], - "markers": "python_version >= '3.8'", - "version": "==2.9.0" + "markers": "python_version >= '3.9'", + "version": "==2.10.0" }, "python-dateutil": { "hashes": [ @@ -1573,19 +1569,19 @@ }, "s3transfer": { "hashes": [ - "sha256:263ed587a5803c6c708d3ce44dc4dfedaab4c1a32e8329bab818933d79ddcf5d", - "sha256:4f50ed74ab84d474ce614475e0b8d5047ff080810aac5d01ea25231cfc944b0c" + "sha256:244a76a24355363a68164241438de1b72f8781664920260c48465896b712a41e", + "sha256:29edc09801743c21eb5ecbc617a152df41d3c287f67b615f73e5f750583666a7" ], "markers": "python_version >= '3.8'", - "version": "==0.10.3" + "version": "==0.10.4" }, "setuptools": { "hashes": [ - "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", - "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686" + "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6", + "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d" ], - "markers": "python_version >= '3.8'", - "version": "==75.3.0" + "markers": "python_version >= '3.9'", + "version": "==75.6.0" }, "six": { "hashes": [ @@ -1637,99 +1633,99 @@ }, "werkzeug": { "hashes": [ - "sha256:4f7d1a5de312c810a8a2c6f0b47e9f6a7cffb7c8322def35e4d4d9841ff85597", - "sha256:f471a4cd167233077e9d2a8190c3471c5bc520c636a9e3c1e9300c33bced03bc" + "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", + "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746" ], "markers": "python_version >= '3.9'", - "version": "==3.1.2" + "version": "==3.1.3" }, "yarl": { "hashes": [ - "sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac", - "sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47", - "sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91", - "sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5", - "sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df", - "sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3", - "sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463", - "sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b", - "sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5", - "sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74", - "sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3", - "sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3", - "sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4", - "sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0", - "sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299", - "sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2", - "sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac", - "sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61", - "sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931", - "sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21", - "sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3", - "sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7", - "sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96", - "sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f", - "sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243", - "sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857", - "sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f", - "sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca", - "sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488", - "sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da", - "sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948", - "sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5", - "sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934", - "sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473", - "sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7", - "sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685", - "sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e", - "sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147", - "sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71", - "sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67", - "sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04", - "sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822", - "sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11", - "sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6", - "sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0", - "sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec", - "sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda", - "sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556", - "sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4", - "sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c", - "sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f", - "sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8", - "sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba", - "sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258", - "sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95", - "sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383", - "sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e", - "sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938", - "sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374", - "sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55", - "sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139", - "sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17", - "sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217", - "sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d", - "sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d", - "sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe", - "sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199", - "sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d", - "sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8", - "sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c", - "sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29", - "sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172", - "sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860", - "sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7", - "sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170", - "sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138", - "sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06", - "sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004", - "sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159", - "sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da", - "sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988", - "sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75" + "sha256:01be8688fc211dc237e628fcc209dda412d35de7642453059a0553747018d075", + "sha256:039c299a0864d1f43c3e31570045635034ea7021db41bf4842693a72aca8df3a", + "sha256:074fee89caab89a97e18ef5f29060ef61ba3cae6cd77673acc54bfdd3214b7b7", + "sha256:13aaf2bdbc8c86ddce48626b15f4987f22e80d898818d735b20bd58f17292ee8", + "sha256:14408cc4d34e202caba7b5ac9cc84700e3421a9e2d1b157d744d101b061a4a88", + "sha256:1db1537e9cb846eb0ff206eac667f627794be8b71368c1ab3207ec7b6f8c5afc", + "sha256:1ece25e2251c28bab737bdf0519c88189b3dd9492dc086a1d77336d940c28ced", + "sha256:1ff116f0285b5c8b3b9a2680aeca29a858b3b9e0402fc79fd850b32c2bcb9f8b", + "sha256:205de377bd23365cd85562c9c6c33844050a93661640fda38e0567d2826b50df", + "sha256:20d95535e7d833889982bfe7cc321b7f63bf8879788fee982c76ae2b24cfb715", + "sha256:20de4a8b04de70c49698dc2390b7fd2d18d424d3b876371f9b775e2b462d4b41", + "sha256:2d90f2e4d16a5b0915ee065218b435d2ef619dd228973b1b47d262a6f7cd8fa5", + "sha256:2e6b4466714a73f5251d84b471475850954f1fa6acce4d3f404da1d55d644c34", + "sha256:309f8d27d6f93ceeeb80aa6980e883aa57895270f7f41842b92247e65d7aeddf", + "sha256:32141e13a1d5a48525e519c9197d3f4d9744d818d5c7d6547524cc9eccc8971e", + "sha256:34176bfb082add67cb2a20abd85854165540891147f88b687a5ed0dc225750a0", + "sha256:38b39b7b3e692b6c92b986b00137a3891eddb66311b229d1940dcbd4f025083c", + "sha256:3a3709450a574d61be6ac53d582496014342ea34876af8dc17cc16da32826c9a", + "sha256:3adaaf9c6b1b4fc258584f4443f24d775a2086aee82d1387e48a8b4f3d6aecf6", + "sha256:3f576ed278860df2721a5d57da3381040176ef1d07def9688a385c8330db61a1", + "sha256:42ba84e2ac26a3f252715f8ec17e6fdc0cbf95b9617c5367579fafcd7fba50eb", + "sha256:454902dc1830d935c90b5b53c863ba2a98dcde0fbaa31ca2ed1ad33b2a7171c6", + "sha256:466d31fd043ef9af822ee3f1df8fdff4e8c199a7f4012c2642006af240eade17", + "sha256:49a98ecadc5a241c9ba06de08127ee4796e1009555efd791bac514207862b43d", + "sha256:4d26f1fa9fa2167bb238f6f4b20218eb4e88dd3ef21bb8f97439fa6b5313e30d", + "sha256:52c136f348605974c9b1c878addd6b7a60e3bf2245833e370862009b86fa4689", + "sha256:536a7a8a53b75b2e98ff96edb2dfb91a26b81c4fed82782035767db5a465be46", + "sha256:576d258b21c1db4c6449b1c572c75d03f16a482eb380be8003682bdbe7db2f28", + "sha256:609ffd44fed2ed88d9b4ef62ee860cf86446cf066333ad4ce4123505b819e581", + "sha256:67b336c15e564d76869c9a21316f90edf546809a5796a083b8f57c845056bc01", + "sha256:685cc37f3f307c6a8e879986c6d85328f4c637f002e219f50e2ef66f7e062c1d", + "sha256:6a49ad0102c0f0ba839628d0bf45973c86ce7b590cdedf7540d5b1833ddc6f00", + "sha256:6fb64dd45453225f57d82c4764818d7a205ee31ce193e9f0086e493916bd4f72", + "sha256:701bb4a8f4de191c8c0cc9a1e6d5142f4df880e9d1210e333b829ca9425570ed", + "sha256:73553bbeea7d6ec88c08ad8027f4e992798f0abc459361bf06641c71972794dc", + "sha256:7520e799b1f84e095cce919bd6c23c9d49472deeef25fe1ef960b04cca51c3fc", + "sha256:7609b8462351c4836b3edce4201acb6dd46187b207c589b30a87ffd1813b48dc", + "sha256:7db9584235895a1dffca17e1c634b13870852094f6389b68dcc6338086aa7b08", + "sha256:7fa7d37f2ada0f42e0723632993ed422f2a679af0e200874d9d861720a54f53e", + "sha256:80741ec5b471fbdfb997821b2842c59660a1c930ceb42f8a84ba8ca0f25a66aa", + "sha256:8254dbfce84ee5d1e81051ee7a0f1536c108ba294c0fdb5933476398df0654f3", + "sha256:8b8d3e4e014fb4274f1c5bf61511d2199e263909fb0b8bda2a7428b0894e8dc6", + "sha256:8e1c18890091aa3cc8a77967943476b729dc2016f4cfe11e45d89b12519d4a93", + "sha256:9106025c7f261f9f5144f9aa7681d43867eed06349a7cfb297a1bc804de2f0d1", + "sha256:91b8fb9427e33f83ca2ba9501221ffaac1ecf0407f758c4d2f283c523da185ee", + "sha256:96404e8d5e1bbe36bdaa84ef89dc36f0e75939e060ca5cd45451aba01db02902", + "sha256:9b4c90c5363c6b0a54188122b61edb919c2cd1119684999d08cd5e538813a28e", + "sha256:a0509475d714df8f6d498935b3f307cd122c4ca76f7d426c7e1bb791bcd87eda", + "sha256:a173401d7821a2a81c7b47d4e7d5c4021375a1441af0c58611c1957445055056", + "sha256:a45d94075ac0647621eaaf693c8751813a3eccac455d423f473ffed38c8ac5c9", + "sha256:a5f72421246c21af6a92fbc8c13b6d4c5427dfd949049b937c3b731f2f9076bd", + "sha256:a64619a9c47c25582190af38e9eb382279ad42e1f06034f14d794670796016c0", + "sha256:a7ee6884a8848792d58b854946b685521f41d8871afa65e0d4a774954e9c9e89", + "sha256:ae38bd86eae3ba3d2ce5636cc9e23c80c9db2e9cb557e40b98153ed102b5a736", + "sha256:b026cf2c32daf48d90c0c4e406815c3f8f4cfe0c6dfccb094a9add1ff6a0e41a", + "sha256:b0a2074a37285570d54b55820687de3d2f2b9ecf1b714e482e48c9e7c0402038", + "sha256:b1a3297b9cad594e1ff0c040d2881d7d3a74124a3c73e00c3c71526a1234a9f7", + "sha256:b212452b80cae26cb767aa045b051740e464c5129b7bd739c58fbb7deb339e7b", + "sha256:b234a4a9248a9f000b7a5dfe84b8cb6210ee5120ae70eb72a4dcbdb4c528f72f", + "sha256:b4095c5019bb889aa866bf12ed4c85c0daea5aafcb7c20d1519f02a1e738f07f", + "sha256:b8e8c516dc4e1a51d86ac975b0350735007e554c962281c432eaa5822aa9765c", + "sha256:bd80ed29761490c622edde5dd70537ca8c992c2952eb62ed46984f8eff66d6e8", + "sha256:c083f6dd6951b86e484ebfc9c3524b49bcaa9c420cb4b2a78ef9f7a512bfcc85", + "sha256:c0f4808644baf0a434a3442df5e0bedf8d05208f0719cedcd499e168b23bfdc4", + "sha256:c4cb992d8090d5ae5f7afa6754d7211c578be0c45f54d3d94f7781c495d56716", + "sha256:c60e547c0a375c4bfcdd60eef82e7e0e8698bf84c239d715f5c1278a73050393", + "sha256:c73a6bbc97ba1b5a0c3c992ae93d721c395bdbb120492759b94cc1ac71bc6350", + "sha256:c893f8c1a6d48b25961e00922724732d00b39de8bb0b451307482dc87bddcd74", + "sha256:cd6ab7d6776c186f544f893b45ee0c883542b35e8a493db74665d2e594d3ca75", + "sha256:d89ae7de94631b60d468412c18290d358a9d805182373d804ec839978b120422", + "sha256:d9d4f5e471e8dc49b593a80766c2328257e405f943c56a3dc985c125732bc4cf", + "sha256:da206d1ec78438a563c5429ab808a2b23ad7bc025c8adbf08540dde202be37d5", + "sha256:dbf53db46f7cf176ee01d8d98c39381440776fcda13779d269a8ba664f69bec0", + "sha256:dd21c0128e301851de51bc607b0a6da50e82dc34e9601f4b508d08cc89ee7929", + "sha256:e2580c1d7e66e6d29d6e11855e3b1c6381971e0edd9a5066e6c14d79bc8967af", + "sha256:e3818eabaefb90adeb5e0f62f047310079d426387991106d4fbf3519eec7d90a", + "sha256:ed69af4fe2a0949b1ea1d012bf065c77b4c7822bad4737f17807af2adb15a73c", + "sha256:f172b8b2c72a13a06ea49225a9c47079549036ad1b34afa12d5491b881f5b993", + "sha256:f275ede6199d0f1ed4ea5d55a7b7573ccd40d97aee7808559e1298fe6efc8dbd", + "sha256:f7edeb1dcc7f50a2c8e08b9dc13a413903b7817e72273f00878cb70e766bdb3b", + "sha256:fa2c9cb607e0f660d48c54a63de7a9b36fef62f6b8bd50ff592ce1137e73ac7d", + "sha256:fe94d1de77c4cd8caff1bd5480e22342dbd54c93929f5943495d9c1e8abe9f42" ], "markers": "python_version >= '3.9'", - "version": "==1.17.1" + "version": "==1.18.0" }, "zope.event": { "hashes": [ @@ -2013,72 +2009,72 @@ }, "coverage": { "hashes": [ - "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376", - "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9", - "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111", - "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172", - "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491", - "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546", - "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2", - "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11", - "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08", - "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c", - "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2", - "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963", - "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613", - "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0", - "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db", - "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf", - "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73", - "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117", - "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1", - "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e", - "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522", - "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25", - "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc", - "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea", - "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52", - "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a", - "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07", - "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06", - "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa", - "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901", - "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b", - "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17", - "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0", - "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21", - "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19", - "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5", - "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51", - "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3", - "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3", - "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f", - "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076", - "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a", - "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718", - "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba", - "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e", - "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27", - "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e", - "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09", - "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e", - "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70", - "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f", - "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72", - "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a", - "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef", - "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b", - "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b", - "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f", - "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806", - "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b", - "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1", - "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c", - "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858" + "sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5", + "sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf", + "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb", + "sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638", + "sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4", + "sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc", + "sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed", + "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a", + "sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d", + "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649", + "sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c", + "sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b", + "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4", + "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443", + "sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83", + "sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee", + "sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e", + "sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e", + "sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3", + "sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0", + "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb", + "sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076", + "sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb", + "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787", + "sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1", + "sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e", + "sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce", + "sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801", + "sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764", + "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365", + "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf", + "sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6", + "sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71", + "sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002", + "sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4", + "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c", + "sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8", + "sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4", + "sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146", + "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc", + "sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea", + "sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4", + "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad", + "sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28", + "sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451", + "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50", + "sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779", + "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63", + "sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e", + "sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc", + "sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022", + "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d", + "sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94", + "sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b", + "sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d", + "sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331", + "sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a", + "sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0", + "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee", + "sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92", + "sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a", + "sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==7.6.4" + "version": "==7.6.8" }, "docker": { "hashes": [ @@ -2112,12 +2108,12 @@ }, "minio": { "hashes": [ - "sha256:418c31ac79346a580df04a0e14db1becbc548a6e7cca61f9bc4ef3bcd336c449", - "sha256:5961c58192b1d70d3a2a362064b8e027b8232688998a6d1251dadbb02ab57a7d" + "sha256:153582ed52ff3b5005ba558e1f25bfe1e9e834f7f0745e594777f28e3e81e1a0", + "sha256:4db95a21fe1e2022ec975292d8a1f83bd5b18f830d23d42a4518ac7a5281d7c5" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==7.2.10" + "version": "==7.2.11" }, "opensearch-py": { "hashes": [ @@ -2130,11 +2126,11 @@ }, "packaging": { "hashes": [ - "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", - "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], "markers": "python_version >= '3.8'", - "version": "==24.1" + "version": "==24.2" }, "pluggy": { "hashes": [ @@ -2274,79 +2270,74 @@ }, "wrapt": { "hashes": [ - "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc", - "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81", - "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09", - "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e", - "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca", - "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0", - "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb", - "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487", - "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40", - "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c", - "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060", - "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202", - "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41", - "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9", - "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b", - "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664", - "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d", - "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362", - "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00", - "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc", - "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1", - "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267", - "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956", - "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966", - "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1", - "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228", - "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72", - "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d", - "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292", - "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0", - "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0", - "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36", - "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c", - "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5", - "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f", - "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73", - "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b", - "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2", - "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593", - "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39", - "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389", - "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf", - "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf", - "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89", - "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c", - "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c", - "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f", - "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440", - "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465", - "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136", - "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b", - "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8", - "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3", - "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8", - "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6", - "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e", - "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f", - "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c", - "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e", - "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8", - "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2", - "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020", - "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35", - "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d", - "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3", - "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537", - "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809", - "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d", - "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a", - "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4" + "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d", + "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301", + "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635", + "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a", + "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed", + "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721", + "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801", + "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b", + "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1", + "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88", + "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8", + "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0", + "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f", + "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578", + "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7", + "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045", + "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada", + "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d", + "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b", + "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a", + "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977", + "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea", + "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346", + "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13", + "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22", + "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339", + "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9", + "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181", + "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c", + "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90", + "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a", + "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489", + "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f", + "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504", + "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea", + "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569", + "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4", + "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce", + "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab", + "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a", + "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f", + "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c", + "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9", + "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf", + "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d", + "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627", + "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d", + "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4", + "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c", + "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d", + "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad", + "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b", + "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33", + "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371", + "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1", + "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393", + "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106", + "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df", + "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379", + "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451", + "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b", + "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575", + "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed", + "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb", + "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838" ], - "markers": "python_version >= '3.6'", - "version": "==1.16.0" + "markers": "python_version >= '3.8'", + "version": "==1.17.0" } } } diff --git a/dbrepo-analyse-service/lib/dbrepo-1.5.2.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.5.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7ae42798985882bb5103892cb62a50e3ef9ae9da GIT binary patch literal 39335 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 RbMO6Uf9SuvIzt630{~#~jwAp8 literal 0 HcmV?d00001 diff --git a/dbrepo-data-service/pom.xml b/dbrepo-data-service/pom.xml index c017193c5f..5f813b94c7 100644 --- a/dbrepo-data-service/pom.xml +++ b/dbrepo-data-service/pom.xml @@ -11,7 +11,7 @@ <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> <name>dbrepo-data-service</name> - <version>1.5.1</version> + <version>1.5.2</version> <description>Service that manages the data</description> diff --git a/dbrepo-data-service/querystore/pom.xml b/dbrepo-data-service/querystore/pom.xml index 3abf3e22b7..a508c88343 100644 --- a/dbrepo-data-service/querystore/pom.xml +++ b/dbrepo-data-service/querystore/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>dbrepo-data-service-querystore</artifactId> <name>dbrepo-data-service-querystore</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies/> diff --git a/dbrepo-data-service/report/pom.xml b/dbrepo-data-service/report/pom.xml index 11338807b8..da3d605405 100644 --- a/dbrepo-data-service/report/pom.xml +++ b/dbrepo-data-service/report/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>report</artifactId> <name>dbrepo-data-service-report</name> - <version>1.5.1</version> + <version>1.5.2</version> <description> This module is only intended for the pipeline coverage report. See the detailed report in the respective modules diff --git a/dbrepo-data-service/rest-service/pom.xml b/dbrepo-data-service/rest-service/pom.xml index 143c920e5c..0859d43724 100644 --- a/dbrepo-data-service/rest-service/pom.xml +++ b/dbrepo-data-service/rest-service/pom.xml @@ -6,18 +6,18 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>rest-service</artifactId> <name>dbrepo-data-service-rest-service</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies> <dependency> <groupId>at.tuwien</groupId> <artifactId>services</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> </dependency> </dependencies> diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java index 29b7dfa67c..f13b02caa2 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/TableEndpointUnitTest.java @@ -2,7 +2,6 @@ package at.tuwien.endpoint; import at.tuwien.ExportResourceDto; import at.tuwien.api.database.DatabaseAccessDto; -import at.tuwien.api.database.internal.PrivilegedDatabaseDto; import at.tuwien.api.database.query.ImportDto; import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.*; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java index 1f4beb8afa..2e856b2d2f 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/endpoint/ViewEndpointUnitTest.java @@ -17,7 +17,6 @@ import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.access.AccessDeniedException; import org.springframework.security.test.context.support.WithAnonymousUser; import org.springframework.security.test.context.support.WithMockUser; import org.springframework.test.context.junit.jupiter.SpringExtension; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java index c89d53282c..f1dc40b5af 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/DatabaseServiceIntegrationTest.java @@ -4,9 +4,8 @@ import at.tuwien.api.database.internal.PrivilegedDatabaseDto; import at.tuwien.api.user.internal.UpdateUserPasswordDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.*; +import at.tuwien.exception.DatabaseMalformedException; import at.tuwien.mapper.MariaDbMapper; -import at.tuwien.mapper.MariaDbMapperImpl; import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeAll; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SubsetServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SubsetServiceIntegrationTest.java index 63f69734f3..0f0820926f 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SubsetServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/SubsetServiceIntegrationTest.java @@ -14,7 +14,6 @@ import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; import org.apache.commons.lang3.RandomStringUtils; import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Row; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java index e24af574cb..3b59dac2c1 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/TableServiceIntegrationTest.java @@ -42,7 +42,7 @@ import java.util.*; import static at.tuwien.service.SchemaServiceIntegrationTest.assertColumn; import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.ArgumentMatchers.*; +import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.when; diff --git a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java index 670c9c66a5..4018c95334 100644 --- a/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java +++ b/dbrepo-data-service/rest-service/src/test/java/at/tuwien/service/ViewServiceIntegrationTest.java @@ -5,7 +5,9 @@ import at.tuwien.api.database.ViewDto; import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.config.MariaDbConfig; import at.tuwien.config.MariaDbContainerConfig; -import at.tuwien.exception.*; +import at.tuwien.exception.DatabaseMalformedException; +import at.tuwien.exception.ViewMalformedException; +import at.tuwien.exception.ViewNotFoundException; import at.tuwien.test.AbstractUnitTest; import lombok.extern.log4j.Log4j2; import org.junit.jupiter.api.BeforeEach; @@ -24,7 +26,6 @@ import java.util.List; import java.util.Map; import static org.junit.jupiter.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.assertTrue; @Log4j2 @SpringBootTest diff --git a/dbrepo-data-service/services/pom.xml b/dbrepo-data-service/services/pom.xml index a50d327e18..ee3c9b2b6c 100644 --- a/dbrepo-data-service/services/pom.xml +++ b/dbrepo-data-service/services/pom.xml @@ -6,18 +6,18 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>services</artifactId> <name>dbrepo-data-service-services</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies> <dependency> <groupId>at.tuwien</groupId> <artifactId>dbrepo-data-service-querystore</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> </dependency> </dependencies> diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java index ff3ab95a44..7a268f5248 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/DataMapper.java @@ -1,6 +1,5 @@ package at.tuwien.mapper; -import at.tuwien.ExportResourceDto; import at.tuwien.api.database.DatabaseDto; import at.tuwien.api.database.ViewColumnDto; import at.tuwien.api.database.ViewDto; @@ -33,18 +32,15 @@ import net.sf.jsqlparser.statement.select.*; import org.apache.hadoop.shaded.com.google.common.hash.Hashing; import org.apache.hadoop.shaded.org.apache.commons.codec.binary.Hex; import org.apache.hadoop.shaded.org.apache.commons.io.FileUtils; -import org.apache.spark.Partition; -import org.apache.spark.api.java.JavaRDD; -import org.apache.spark.sql.Dataset; -import org.apache.spark.sql.Row; -import org.apache.spark.sql.SaveMode; import org.jetbrains.annotations.NotNull; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.Mappings; -import org.springframework.core.io.InputStreamResource; -import java.io.*; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.StringReader; import java.math.BigInteger; import java.nio.charset.StandardCharsets; import java.sql.*; @@ -217,20 +213,20 @@ public interface DataMapper { /** * Parse columns from a SQL statement of a known database. * - * @param database The database. - * @param query The SQL statement. + * @param databaseId The database id. + * @param tables The list of tables. + * @param query The SQL statement. * @return The list of columns. * @throws JSQLParserException The table/view or column was not found in the database. */ - default List<ColumnDto> parseColumns(DatabaseDto database, String query) throws JSQLParserException { + default List<ColumnDto> parseColumns(Long databaseId, List<TableDto> tables, String query) throws JSQLParserException { final List<ColumnDto> columns = new ArrayList<>(); final CCJSqlParserManager parserRealSql = new CCJSqlParserManager(); final net.sf.jsqlparser.statement.Statement statement = parserRealSql.parse(new StringReader(query)); log.trace("parse columns from query: {}", query); /* bi-directional mapping */ - database.getTables() - .forEach(table -> table.getColumns() - .forEach(column -> column.setTable(table))); + tables.forEach(table -> table.getColumns() + .forEach(column -> column.setTable(table))); /* check */ if (!(statement instanceof Select selectStatement)) { log.error("Query attempts to update the dataset, not a SELECT statement"); @@ -250,8 +246,7 @@ public interface DataMapper { } } } - final List<ColumnDto> allColumns = database.getTables() - .stream() + final List<ColumnDto> allColumns = tables.stream() .map(TableDto::getColumns) .flatMap(List::stream) .toList(); @@ -310,7 +305,7 @@ public interface DataMapper { if (item.getAlias() != null) { resultColumn.setAlias(item.getAlias().getName().replace("`", "")); } - resultColumn.setDatabaseId(database.getId()); + resultColumn.setDatabaseId(databaseId); resultColumn.setTable(resultColumn.getTable()); resultColumn.setTableId(resultColumn.getTable().getId()); log.trace("found column with internal name {} and alias {}", resultColumn.getInternalName(), resultColumn.getAlias()); @@ -509,7 +504,6 @@ public interface DataMapper { .columns(new LinkedList<>()) .identifiers(new LinkedList<>()) .creator(database.getOwner()) - .createdBy(database.getOwner().getId()) .owner(database.getOwner()) .constraints(ConstraintsDto.builder() .foreignKeys(new LinkedList<>()) diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MetadataMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MetadataMapper.java index fca56314af..a585f2e98a 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MetadataMapper.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MetadataMapper.java @@ -3,6 +3,7 @@ package at.tuwien.mapper; import at.tuwien.api.container.ContainerDto; import at.tuwien.api.container.image.ImageDto; import at.tuwien.api.container.internal.PrivilegedContainerDto; +import at.tuwien.api.database.DatabaseBriefDto; import at.tuwien.api.database.DatabaseDto; import at.tuwien.api.database.ViewColumnDto; import at.tuwien.api.database.ViewDto; @@ -10,10 +11,10 @@ import at.tuwien.api.database.internal.PrivilegedDatabaseDto; import at.tuwien.api.database.internal.PrivilegedViewDto; import at.tuwien.api.database.table.TableBriefDto; import at.tuwien.api.database.table.TableDto; -import at.tuwien.api.database.table.columns.ColumnBriefDto; import at.tuwien.api.database.table.columns.ColumnDto; import at.tuwien.api.database.table.internal.PrivilegedTableDto; import at.tuwien.api.user.PrivilegedUserDto; +import at.tuwien.api.user.UserBriefDto; import at.tuwien.api.user.UserDto; import org.mapstruct.Mapper; import org.mapstruct.Mapping; @@ -28,6 +29,8 @@ public interface MetadataMapper { DatabaseDto privilegedDatabaseDtoToDatabaseDto(PrivilegedDatabaseDto data); + DatabaseBriefDto privilegedDatabaseDtoToDatabaseBriefDto(PrivilegedDatabaseDto data); + TableDto privilegedTableDtoToTableDto(PrivilegedTableDto data); ColumnDto viewColumnDtoToColumnDto(ViewColumnDto data); @@ -45,6 +48,8 @@ public interface MetadataMapper { PrivilegedUserDto userDtoToPrivilegedUserDto(UserDto data); + UserBriefDto userDtoToUserBriefDto(UserDto data); + @Mappings({ @Mapping(target = "databaseId", source = "tdbid") }) diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/AccessServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/AccessServiceMariaDbImpl.java index 4fdb8c32a6..7ed5150095 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/AccessServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/AccessServiceMariaDbImpl.java @@ -4,7 +4,7 @@ import at.tuwien.api.database.AccessTypeDto; import at.tuwien.api.database.internal.PrivilegedDatabaseDto; import at.tuwien.api.user.PrivilegedUserDto; import at.tuwien.api.user.UserDto; -import at.tuwien.exception.*; +import at.tuwien.exception.DatabaseMalformedException; import at.tuwien.mapper.MariaDbMapper; import at.tuwien.service.AccessService; import com.mchange.v2.c3p0.ComboPooledDataSource; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceMariaDbImpl.java index 2d58744a21..b2a9b0c840 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/DatabaseServiceMariaDbImpl.java @@ -1,26 +1,20 @@ package at.tuwien.service.impl; import at.tuwien.api.container.internal.PrivilegedContainerDto; -import at.tuwien.api.database.DatabaseDto; -import at.tuwien.api.database.ViewDto; import at.tuwien.api.database.internal.CreateDatabaseDto; import at.tuwien.api.database.internal.PrivilegedDatabaseDto; -import at.tuwien.api.database.table.TableDto; import at.tuwien.api.user.UserDto; import at.tuwien.api.user.internal.UpdateUserPasswordDto; import at.tuwien.config.RabbitConfig; -import at.tuwien.exception.*; +import at.tuwien.exception.DatabaseMalformedException; import at.tuwien.mapper.MariaDbMapper; import at.tuwien.service.DatabaseService; -import at.tuwien.service.SchemaService; import com.mchange.v2.c3p0.ComboPooledDataSource; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; @Log4j2 diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SchemaServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SchemaServiceMariaDbImpl.java index a0fbd1434c..1aba3c6b99 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SchemaServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SchemaServiceMariaDbImpl.java @@ -140,11 +140,11 @@ public class SchemaServiceMariaDbImpl extends HibernateConnector implements Sche if (!resultSet1.next()) { throw new ViewNotFoundException("Failed to find view in the information schema"); } - ViewDto view = dataMapper.schemaResultSetToView(metadataMapper.privilegedDatabaseDtoToDatabaseDto(privilegedDatabase), resultSet1); + ViewDto view = dataMapper.schemaResultSetToView(database, resultSet1); view.setDatabase(database); view.setVdbid(database.getId()); - view.setCreator(database.getCreator()); - view.setCreatedBy(database.getCreator().getId()); + view.setCreator(database.getOwner()); + view.setCreatedBy(privilegedDatabase.getOwner().getId()); /* obtain view columns */ start = System.currentTimeMillis(); final PreparedStatement statement2 = connection.prepareStatement(mariaDbMapper.databaseTableColumnsSelectRawQuery()); diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SubsetServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SubsetServiceMariaDbImpl.java index 55f513f339..8c5cc6d601 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SubsetServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/SubsetServiceMariaDbImpl.java @@ -10,8 +10,6 @@ import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.columns.ColumnDto; import at.tuwien.api.identifier.IdentifierDto; import at.tuwien.api.identifier.IdentifierTypeDto; -import at.tuwien.api.user.UserDto; -import at.tuwien.config.SparkConfig; import at.tuwien.exception.*; import at.tuwien.gateway.MetadataServiceGateway; import at.tuwien.mapper.DataMapper; @@ -126,7 +124,7 @@ public class SubsetServiceMariaDbImpl extends HibernateConnector implements Subs SQLException { final List<ColumnDto> columns; try { - columns = dataMapper.parseColumns(metadataMapper.privilegedDatabaseDtoToDatabaseDto(database), query.getQuery()); + columns = dataMapper.parseColumns(database.getId(), database.getTables(), query.getQuery()); } catch (JSQLParserException e) { log.error("Failed to map/parse columns: {}", e.getMessage()); throw new TableMalformedException("Failed to map/parse columns: " + e.getMessage(), e); @@ -277,9 +275,7 @@ public class SubsetServiceMariaDbImpl extends HibernateConnector implements Subs } final QueryDto query = dataMapper.resultSetToQueryDto(resultSet); query.setIdentifiers(metadataServiceGateway.getIdentifiers(database.getId(), queryId)); - final UserDto creator = metadataServiceGateway.getUserById(query.getCreatedBy()); - log.debug("retrieved creator from metadata service: creator.id={}, creator.username={}", creator.getId(), creator.getUsername()); - query.setCreator(creator); + query.setCreator(database.getOwner()); query.setDatabaseId(database.getId()); return query; } catch (SQLException e) { diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceMariaDbImpl.java index 531897706b..0eea223f7e 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/TableServiceMariaDbImpl.java @@ -10,8 +10,6 @@ import at.tuwien.api.database.table.columns.ColumnStatisticDto; import at.tuwien.api.database.table.columns.ColumnTypeDto; import at.tuwien.api.database.table.internal.PrivilegedTableDto; import at.tuwien.api.database.table.internal.TableCreateDto; -import at.tuwien.config.S3Config; -import at.tuwien.config.SparkConfig; import at.tuwien.exception.*; import at.tuwien.mapper.DataMapper; import at.tuwien.mapper.MariaDbMapper; @@ -23,15 +21,15 @@ import com.mchange.v2.c3p0.ComboPooledDataSource; import io.micrometer.core.instrument.Counter; import jakarta.validation.constraints.NotNull; import lombok.extern.log4j.Log4j2; -import org.apache.commons.lang3.RandomStringUtils; import org.apache.spark.sql.*; import org.apache.spark.sql.catalyst.ExtendedAnalysisException; -import org.apache.spark.sql.types.StructField; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.io.ByteArrayInputStream; -import java.sql.*; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; import java.time.Instant; import java.util.*; diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java index 77e065bc93..7ca776ff8a 100644 --- a/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java +++ b/dbrepo-data-service/services/src/main/java/at/tuwien/service/impl/ViewServiceMariaDbImpl.java @@ -8,10 +8,7 @@ import at.tuwien.api.database.internal.PrivilegedDatabaseDto; import at.tuwien.api.database.internal.PrivilegedViewDto; import at.tuwien.api.database.query.QueryResultDto; import at.tuwien.api.database.table.columns.ColumnDto; -import at.tuwien.api.database.table.internal.PrivilegedTableDto; import at.tuwien.config.QueryConfig; -import at.tuwien.config.S3Config; -import at.tuwien.config.SparkConfig; import at.tuwien.exception.*; import at.tuwien.mapper.DataMapper; import at.tuwien.mapper.MariaDbMapper; @@ -24,7 +21,6 @@ import com.mchange.v2.c3p0.ComboPooledDataSource; import io.micrometer.core.instrument.Counter; import jakarta.validation.constraints.NotNull; import lombok.extern.log4j.Log4j2; -import org.apache.commons.lang3.RandomStringUtils; import org.apache.spark.sql.Dataset; import org.apache.spark.sql.Row; import org.apache.spark.sql.SparkSession; @@ -32,7 +28,6 @@ import org.apache.spark.sql.catalyst.ExtendedAnalysisException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.io.File; import java.nio.charset.StandardCharsets; import java.sql.Connection; import java.sql.PreparedStatement; diff --git a/dbrepo-metadata-service/api/pom.xml b/dbrepo-metadata-service/api/pom.xml index 38ec447978..9196e2d228 100644 --- a/dbrepo-metadata-service/api/pom.xml +++ b/dbrepo-metadata-service/api/pom.xml @@ -6,18 +6,18 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>dbrepo-metadata-service-api</artifactId> <name>dbrepo-metadata-service-api</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies> <dependency> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service-entities</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> <scope>compile</scope> </dependency> </dependencies> diff --git a/dbrepo-metadata-service/entities/pom.xml b/dbrepo-metadata-service/entities/pom.xml index 05308a9ac3..c308f0163b 100644 --- a/dbrepo-metadata-service/entities/pom.xml +++ b/dbrepo-metadata-service/entities/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>dbrepo-metadata-service-entities</artifactId> <name>dbrepo-metadata-service-entity</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies/> diff --git a/dbrepo-metadata-service/oai/pom.xml b/dbrepo-metadata-service/oai/pom.xml index cf4763dc9e..fddf87ecb4 100644 --- a/dbrepo-metadata-service/oai/pom.xml +++ b/dbrepo-metadata-service/oai/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>dbrepo-metadata-service-oai</artifactId> <name>dbrepo-metadata-service-oai</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies/> diff --git a/dbrepo-metadata-service/pom.xml b/dbrepo-metadata-service/pom.xml index b29d6ff38f..56ab43349a 100644 --- a/dbrepo-metadata-service/pom.xml +++ b/dbrepo-metadata-service/pom.xml @@ -11,7 +11,7 @@ <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> <name>dbrepo-metadata-service</name> - <version>1.5.1</version> + <version>1.5.2</version> <description>Service that manages the metadata</description> diff --git a/dbrepo-metadata-service/report/pom.xml b/dbrepo-metadata-service/report/pom.xml index 2c6a39e535..95ea8b8b97 100644 --- a/dbrepo-metadata-service/report/pom.xml +++ b/dbrepo-metadata-service/report/pom.xml @@ -6,12 +6,12 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>dbrepo-metadata-service-report</artifactId> <name>dbrepo-metadata-service-report</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/repositories/pom.xml b/dbrepo-metadata-service/repositories/pom.xml index 8c1456e7f8..816f71a1cb 100644 --- a/dbrepo-metadata-service/repositories/pom.xml +++ b/dbrepo-metadata-service/repositories/pom.xml @@ -6,12 +6,12 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>dbrepo-metadata-service-repositories</artifactId> <name>dbrepo-metadata-service-repositories</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/rest-service/pom.xml b/dbrepo-metadata-service/rest-service/pom.xml index aaff5b79ef..613d4c4d4a 100644 --- a/dbrepo-metadata-service/rest-service/pom.xml +++ b/dbrepo-metadata-service/rest-service/pom.xml @@ -6,12 +6,12 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>dbrepo-metadata-service-rest-service</artifactId> <name>dbrepo-metadata-service-rest</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/services/pom.xml b/dbrepo-metadata-service/services/pom.xml index eb7370452c..d98e575eb9 100644 --- a/dbrepo-metadata-service/services/pom.xml +++ b/dbrepo-metadata-service/services/pom.xml @@ -6,12 +6,12 @@ <parent> <artifactId>dbrepo-metadata-service</artifactId> <groupId>at.tuwien</groupId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>dbrepo-metadata-service-services</artifactId> <name>dbrepo-metadata-service-services</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies> <dependency> diff --git a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MetricsConfig.java b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MetricsConfig.java index 1b7578b4bc..b86a97a4dc 100644 --- a/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MetricsConfig.java +++ b/dbrepo-metadata-service/services/src/main/java/at/tuwien/config/MetricsConfig.java @@ -14,6 +14,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import java.util.Objects; + @Log4j2 @Configuration public class MetricsConfig { @@ -70,7 +72,12 @@ public class MetricsConfig { if (tableRepository.findAll().isEmpty()) { return 0; } - return tableRepository.findAll().stream().map(Table::getDataLength).mapToLong(d -> d).sum(); + return tableRepository.findAll() + .stream() + .map(Table::getDataLength) + .filter(Objects::nonNull) + .mapToLong(d -> d) + .sum(); }) .description("The total volume of available research data") .strongReference(true) diff --git a/dbrepo-metadata-service/test/pom.xml b/dbrepo-metadata-service/test/pom.xml index 566a06af48..dcccbef8f8 100644 --- a/dbrepo-metadata-service/test/pom.xml +++ b/dbrepo-metadata-service/test/pom.xml @@ -6,12 +6,12 @@ <parent> <groupId>at.tuwien</groupId> <artifactId>dbrepo-metadata-service</artifactId> - <version>1.5.1</version> + <version>1.5.2</version> </parent> <artifactId>dbrepo-metadata-service-test</artifactId> <name>dbrepo-metadata-service-test</name> - <version>1.5.1</version> + <version>1.5.2</version> <dependencies> <dependency> diff --git a/dbrepo-search-service/Pipfile b/dbrepo-search-service/Pipfile index f5d92986eb..e081ac7bb3 100644 --- a/dbrepo-search-service/Pipfile +++ b/dbrepo-search-service/Pipfile @@ -18,7 +18,7 @@ jwt = "~=1.3" testcontainers-opensearch = "*" pytest = "*" rdflib = "*" -dbrepo = {path = "./lib/dbrepo-1.5.1.tar.gz"} +dbrepo = {path = "./lib/dbrepo-1.5.2.tar.gz"} gunicorn = "*" [dev-packages] diff --git a/dbrepo-search-service/Pipfile.lock b/dbrepo-search-service/Pipfile.lock index 51f85d6b5f..b5d9da65de 100644 --- a/dbrepo-search-service/Pipfile.lock +++ b/dbrepo-search-service/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "be9fdeaf34d7833ea27b3671252f40ab07f573db3b9b99f8c99033e43ec25ffe" + "sha256": "5f8f989adc3210e3d07474d3a6c1d5a8bc7352195b75ef07feaf135d9388c60c" }, "pipfile-spec": 6, "requires": { @@ -26,100 +26,85 @@ }, "aiohttp": { "hashes": [ - "sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138", - "sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c", - "sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24", - "sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480", - "sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2", - "sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5", - "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a", - "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8", - "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf", - "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871", - "sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486", - "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9", - "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d", - "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb", - "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68", - "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1", - "sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d", - "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd", - "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1", - "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8", - "sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7", - "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959", - "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7", - "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42", - "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79", - "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38", - "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a", - "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8", - "sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8", - "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151", - "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6", - "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e", - "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7", - "sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce", - "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b", - "sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8", - "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628", - "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f", - "sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a", - "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7", - "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc", - "sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab", - "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b", - "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911", - "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9", - "sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572", - "sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554", - "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d", - "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257", - "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c", - "sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b", - "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742", - "sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090", - "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6", - "sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc", - "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142", - "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16", - "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a", - "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28", - "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e", - "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94", - "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026", - "sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb", - "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28", - "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9", - "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3", - "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f", - "sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983", - "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205", - "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f", - "sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa", - "sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c", - "sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2", - "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb", - "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67", - "sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762", - "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a", - "sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8", - "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a", - "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a", - "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc", - "sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91", - "sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23", - "sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527", - "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6", - "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c", - "sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7", - "sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f", - "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a", - "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092", - "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414" + "sha256:018f1b04883a12e77e7fc161934c0f298865d3a484aea536a6a2ca8d909f0ba0", + "sha256:01a8aca4af3da85cea5c90141d23f4b0eee3cbecfd33b029a45a80f28c66c668", + "sha256:04b0cc74d5a882c9dacaeeccc1444f0233212b6f5be8bc90833feef1e1ce14b9", + "sha256:0de6466b9d742b4ee56fe1b2440706e225eb48c77c63152b1584864a236e7a50", + "sha256:12724f3a211fa243570e601f65a8831372caf1a149d2f1859f68479f07efec3d", + "sha256:12e4d45847a174f77b2b9919719203769f220058f642b08504cf8b1cf185dacf", + "sha256:17829f37c0d31d89aa6b8b010475a10233774771f9b6dc2cc352ea4f8ce95d9a", + "sha256:1a17f6a230f81eb53282503823f59d61dff14fb2a93847bf0399dc8e87817307", + "sha256:1cf03d27885f8c5ebf3993a220cc84fc66375e1e6e812731f51aab2b2748f4a6", + "sha256:1fbf41a6bbc319a7816ae0f0177c265b62f2a59ad301a0e49b395746eb2a9884", + "sha256:2257bdd5cf54a4039a4337162cd8048f05a724380a2283df34620f55d4e29341", + "sha256:24054fce8c6d6f33a3e35d1c603ef1b91bbcba73e3f04a22b4f2f27dac59b347", + "sha256:241a6ca732d2766836d62c58c49ca7a93d08251daef0c1e3c850df1d1ca0cbc4", + "sha256:28c7af3e50e5903d21d7b935aceed901cc2475463bc16ddd5587653548661fdb", + "sha256:351849aca2c6f814575c1a485c01c17a4240413f960df1bf9f5deb0003c61a53", + "sha256:3ce18f703b7298e7f7633efd6a90138d99a3f9a656cb52c1201e76cb5d79cf08", + "sha256:3d1c9c15d3999107cbb9b2d76ca6172e6710a12fda22434ee8bd3f432b7b17e8", + "sha256:3dd3e7e7c9ef3e7214f014f1ae260892286647b3cf7c7f1b644a568fd410f8ca", + "sha256:43bfd25113c1e98aec6c70e26d5f4331efbf4aa9037ba9ad88f090853bf64d7f", + "sha256:43dd89a6194f6ab02a3fe36b09e42e2df19c211fc2050ce37374d96f39604997", + "sha256:481f10a1a45c5f4c4a578bbd74cff22eb64460a6549819242a87a80788461fba", + "sha256:4ba8d043fed7ffa117024d7ba66fdea011c0e7602327c6d73cacaea38abe4491", + "sha256:4bb7493c3e3a36d3012b8564bd0e2783259ddd7ef3a81a74f0dbfa000fce48b7", + "sha256:4c1a6309005acc4b2bcc577ba3b9169fea52638709ffacbd071f3503264620da", + "sha256:4dda726f89bfa5c465ba45b76515135a3ece0088dfa2da49b8bb278f3bdeea12", + "sha256:53c921b58fdc6485d6b2603e0132bb01cd59b8f0620ffc0907f525e0ba071687", + "sha256:5578cf40440eafcb054cf859964bc120ab52ebe0e0562d2b898126d868749629", + "sha256:59ee1925b5a5efdf6c4e7be51deee93984d0ac14a6897bd521b498b9916f1544", + "sha256:670847ee6aeb3a569cd7cdfbe0c3bec1d44828bbfbe78c5d305f7f804870ef9e", + "sha256:78c657ece7a73b976905ab9ec8be9ef2df12ed8984c24598a1791c58ce3b4ce4", + "sha256:7a9318da4b4ada9a67c1dd84d1c0834123081e746bee311a16bb449f363d965e", + "sha256:7b2f8107a3c329789f3c00b2daad0e35f548d0a55cda6291579136622099a46e", + "sha256:7ea4490360b605804bea8173d2d086b6c379d6bb22ac434de605a9cbce006e7d", + "sha256:8360c7cc620abb320e1b8d603c39095101391a82b1d0be05fb2225471c9c5c52", + "sha256:875f7100ce0e74af51d4139495eec4025affa1a605280f23990b6434b81df1bd", + "sha256:8bedb1f6cb919af3b6353921c71281b1491f948ca64408871465d889b4ee1b66", + "sha256:8d20cfe63a1c135d26bde8c1d0ea46fd1200884afbc523466d2f1cf517d1fe33", + "sha256:9202f184cc0582b1db15056f2225ab4c1e3dac4d9ade50dd0613ac3c46352ac2", + "sha256:9acfc7f652b31853eed3b92095b0acf06fd5597eeea42e939bd23a17137679d5", + "sha256:9d18a8b44ec8502a7fde91446cd9c9b95ce7c49f1eacc1fb2358b8907d4369fd", + "sha256:9e67531370a3b07e49b280c1f8c2df67985c790ad2834d1b288a2f13cd341c5f", + "sha256:9ee6a4cdcbf54b8083dc9723cdf5f41f722c00db40ccf9ec2616e27869151129", + "sha256:a7d9a606355655617fee25dd7e54d3af50804d002f1fd3118dd6312d26692d70", + "sha256:aa3705a8d14de39898da0fbad920b2a37b7547c3afd2a18b9b81f0223b7d0f68", + "sha256:b7215bf2b53bc6cb35808149980c2ae80a4ae4e273890ac85459c014d5aa60ac", + "sha256:badda65ac99555791eed75e234afb94686ed2317670c68bff8a4498acdaee935", + "sha256:bf0e6cce113596377cadda4e3ac5fb89f095bd492226e46d91b4baef1dd16f60", + "sha256:c171fc35d3174bbf4787381716564042a4cbc008824d8195eede3d9b938e29a8", + "sha256:c1f6490dd1862af5aae6cfcf2a274bffa9a5b32a8f5acb519a7ecf5a99a88866", + "sha256:c25b74a811dba37c7ea6a14d99eb9402d89c8d739d50748a75f3cf994cf19c43", + "sha256:c6095aaf852c34f42e1bd0cf0dc32d1e4b48a90bfb5054abdbb9d64b36acadcb", + "sha256:c63f898f683d1379b9be5afc3dd139e20b30b0b1e0bf69a3fc3681f364cf1629", + "sha256:cd8d62cab363dfe713067027a5adb4907515861f1e4ce63e7be810b83668b847", + "sha256:ce91a24aac80de6be8512fb1c4838a9881aa713f44f4e91dd7bb3b34061b497d", + "sha256:cea52d11e02123f125f9055dfe0ccf1c3857225fb879e4a944fae12989e2aef2", + "sha256:cf4efa2d01f697a7dbd0509891a286a4af0d86902fc594e20e3b1712c28c0106", + "sha256:d2fa6fc7cc865d26ff42480ac9b52b8c9b7da30a10a6442a9cdf429de840e949", + "sha256:d329300fb23e14ed1f8c6d688dfd867d1dcc3b1d7cd49b7f8c5b44e797ce0932", + "sha256:d6177077a31b1aecfc3c9070bd2f11419dbb4a70f30f4c65b124714f525c2e48", + "sha256:db37248535d1ae40735d15bdf26ad43be19e3d93ab3f3dad8507eb0f85bb8124", + "sha256:db70a47987e34494b451a334605bee57a126fe8d290511349e86810b4be53b01", + "sha256:dcefcf2915a2dbdbce37e2fc1622129a1918abfe3d06721ce9f6cdac9b6d2eaa", + "sha256:dda3ed0a7869d2fa16aa41f9961ade73aa2c2e3b2fcb0a352524e7b744881889", + "sha256:e0bf378db07df0a713a1e32381a1b277e62ad106d0dbe17b5479e76ec706d720", + "sha256:e13a05db87d3b241c186d0936808d0e4e12decc267c617d54e9c643807e968b6", + "sha256:e143b0ef9cb1a2b4f74f56d4fbe50caa7c2bb93390aff52f9398d21d89bc73ea", + "sha256:e22d1721c978a6494adc824e0916f9d187fa57baeda34b55140315fa2f740184", + "sha256:e5522ee72f95661e79db691310290c4618b86dff2d9b90baedf343fd7a08bf79", + "sha256:e993676c71288618eb07e20622572b1250d8713e7e00ab3aabae28cb70f3640d", + "sha256:ee9afa1b0d2293c46954f47f33e150798ad68b78925e3710044e0d67a9487791", + "sha256:f1ac5462582d6561c1c1708853a9faf612ff4e5ea5e679e99be36143d6eabd8e", + "sha256:f5022504adab881e2d801a88b748ea63f2a9d130e0b2c430824682a96f6534be", + "sha256:f5b973cce96793725ef63eb449adfb74f99c043c718acb76e0d2a447ae369962", + "sha256:f7c58a240260822dc07f6ae32a0293dd5bccd618bb2d0f36d51c5dbd526f89c0", + "sha256:fc6da202068e0a268e298d7cd09b6e9f3997736cd9b060e2750963754552a0a9", + "sha256:fdadc3f6a32d6eca45f9a900a254757fd7855dfb2d8f8dcf0e88f0fae3ff8eb1" ], - "markers": "python_version >= '3.8'", - "version": "==3.10.10" + "markers": "python_version >= '3.9'", + "version": "==3.11.7" }, "aiosignal": { "hashes": [ @@ -147,11 +132,11 @@ }, "blinker": { "hashes": [ - "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01", - "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83" + "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", + "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc" ], - "markers": "python_version >= '3.8'", - "version": "==1.8.2" + "markers": "python_version >= '3.9'", + "version": "==1.9.0" }, "certifi": { "hashes": [ @@ -388,9 +373,9 @@ }, "dbrepo": { "hashes": [ - "sha256:d60be1e9261bde6b9d4ebe5db46896b1bfaed918eff7b98194e4224d94511497" + "sha256:c215250a1e8e73febab17a31a7e7bc84b4c7aadde2508599be2eb4ec1ae17b5d" ], - "path": "./lib/dbrepo-1.5.1.tar.gz" + "path": "./lib/dbrepo-1.5.2.tar.gz" }, "docker": { "hashes": [ @@ -440,12 +425,12 @@ }, "flask-jwt-extended": { "hashes": [ - "sha256:63a28fc9731bcc6c4b8815b6f954b5904caa534fc2ae9b93b1d3ef12930dca95", - "sha256:9215d05a9413d3855764bcd67035e75819d23af2fafb6b55197eb5a3313fdfb2" + "sha256:52f35bf0985354d7fb7b876e2eb0e0b141aaff865a22ff6cc33d9a18aa987978", + "sha256:8085d6757505b6f3291a2638c84d207e8f0ad0de662d1f46aa2f77e658a0c976" ], "index": "pypi", - "markers": "python_version >= '3.7' and python_version < '4'", - "version": "==4.6.0" + "markers": "python_version >= '3.9' and python_version < '4'", + "version": "==4.7.1" }, "flask-sqlalchemy": { "hashes": [ @@ -943,11 +928,11 @@ }, "packaging": { "hashes": [ - "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", - "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], "markers": "python_version >= '3.8'", - "version": "==24.1" + "version": "==24.2" }, "pandas": { "hashes": [ @@ -1143,114 +1128,125 @@ }, "pydantic": { "hashes": [ - "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f", - "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12" + "sha256:a4daca2dc0aa429555e0656d6bf94873a7dc5f54ee42b1f5873d666fb3f35560", + "sha256:a8d20db84de64cf4a7d59e899c2caf0fe9d660c7cfc482528e7020d7dd189a7e" ], "markers": "python_version >= '3.8'", - "version": "==2.9.2" + "version": "==2.10.1" }, "pydantic-core": { "hashes": [ - "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36", - "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05", - "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071", - "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327", - "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c", - "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36", - "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29", - "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744", - "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d", - "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec", - "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e", - "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e", - "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577", - "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232", - "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863", - "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6", - "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368", - "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480", - "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2", - "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2", - "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6", - "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769", - "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d", - "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2", - "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84", - "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166", - "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271", - "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5", - "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb", - "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13", - "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323", - "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556", - "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665", - "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef", - "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb", - "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119", - "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126", - "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510", - "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b", - "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87", - "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f", - "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc", - "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8", - "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21", - "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f", - "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6", - "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658", - "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b", - "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3", - "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb", - "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59", - "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24", - "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9", - "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3", - "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd", - "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753", - "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55", - "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad", - "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a", - "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605", - "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e", - "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b", - "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433", - "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8", - "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07", - "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728", - "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0", - "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327", - "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555", - "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64", - "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6", - "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea", - "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b", - "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df", - "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e", - "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd", - "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068", - "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3", - "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040", - "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12", - "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916", - "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f", - "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f", - "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801", - "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231", - "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5", - "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8", - "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee", - "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607" + "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9", + "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b", + "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c", + "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529", + "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc", + "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854", + "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d", + "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278", + "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a", + "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c", + "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f", + "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27", + "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f", + "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac", + "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2", + "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97", + "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a", + "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919", + "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9", + "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4", + "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c", + "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131", + "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5", + "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd", + "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089", + "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107", + "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6", + "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60", + "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf", + "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5", + "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08", + "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05", + "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2", + "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e", + "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c", + "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17", + "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62", + "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23", + "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be", + "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067", + "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02", + "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f", + "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235", + "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840", + "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5", + "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807", + "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16", + "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c", + "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864", + "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e", + "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a", + "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35", + "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737", + "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a", + "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3", + "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52", + "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05", + "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31", + "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89", + "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de", + "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6", + "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36", + "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c", + "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154", + "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb", + "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e", + "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd", + "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3", + "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f", + "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78", + "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960", + "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618", + "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08", + "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4", + "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c", + "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c", + "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330", + "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8", + "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792", + "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025", + "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9", + "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f", + "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01", + "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337", + "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4", + "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f", + "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd", + "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51", + "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab", + "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc", + "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676", + "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381", + "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed", + "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb", + "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967", + "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073", + "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae", + "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c", + "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206", + "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b" ], "markers": "python_version >= '3.8'", - "version": "==2.23.4" + "version": "==2.27.1" }, "pyjwt": { "hashes": [ - "sha256:3b02fb0f44517787776cf48f2ae25d8e14f300e6d7545a4315cee571a415e850", - "sha256:7e1e5b56cc735432a7369cbfa0efe50fa113ebecdc04ae6922deba8b84582d0c" + "sha256:543b77207db656de204372350926bed5a86201c4cbff159f623f79c7bb487a15", + "sha256:7628a7eb7938959ac1b26e819a1df0fd3259505627b575e4bad6d08f76db695c" ], - "markers": "python_version >= '3.8'", - "version": "==2.9.0" + "markers": "python_version >= '3.9'", + "version": "==2.10.0" }, "pyparsing": { "hashes": [ @@ -1610,175 +1606,170 @@ }, "werkzeug": { "hashes": [ - "sha256:4f7d1a5de312c810a8a2c6f0b47e9f6a7cffb7c8322def35e4d4d9841ff85597", - "sha256:f471a4cd167233077e9d2a8190c3471c5bc520c636a9e3c1e9300c33bced03bc" + "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", + "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746" ], "markers": "python_version >= '3.9'", - "version": "==3.1.2" + "version": "==3.1.3" }, "wrapt": { "hashes": [ - "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc", - "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81", - "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09", - "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e", - "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca", - "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0", - "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb", - "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487", - "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40", - "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c", - "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060", - "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202", - "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41", - "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9", - "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b", - "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664", - "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d", - "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362", - "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00", - "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc", - "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1", - "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267", - "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956", - "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966", - "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1", - "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228", - "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72", - "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d", - "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292", - "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0", - "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0", - "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36", - "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c", - "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5", - "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f", - "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73", - "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b", - "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2", - "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593", - "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39", - "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389", - "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf", - "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf", - "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89", - "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c", - "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c", - "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f", - "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440", - "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465", - "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136", - "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b", - "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8", - "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3", - "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8", - "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6", - "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e", - "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f", - "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c", - "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e", - "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8", - "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2", - "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020", - "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35", - "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d", - "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3", - "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537", - "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809", - "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d", - "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a", - "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4" + "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d", + "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301", + "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635", + "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a", + "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed", + "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721", + "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801", + "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b", + "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1", + "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88", + "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8", + "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0", + "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f", + "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578", + "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7", + "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045", + "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada", + "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d", + "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b", + "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a", + "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977", + "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea", + "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346", + "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13", + "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22", + "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339", + "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9", + "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181", + "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c", + "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90", + "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a", + "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489", + "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f", + "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504", + "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea", + "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569", + "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4", + "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce", + "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab", + "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a", + "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f", + "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c", + "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9", + "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf", + "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d", + "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627", + "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d", + "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4", + "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c", + "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d", + "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad", + "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b", + "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33", + "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371", + "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1", + "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393", + "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106", + "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df", + "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379", + "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451", + "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b", + "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575", + "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed", + "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb", + "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838" ], - "markers": "python_version >= '3.6'", - "version": "==1.16.0" + "markers": "python_version >= '3.8'", + "version": "==1.17.0" }, "yarl": { "hashes": [ - "sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac", - "sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47", - "sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91", - "sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5", - "sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df", - "sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3", - "sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463", - "sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b", - "sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5", - "sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74", - "sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3", - "sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3", - "sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4", - "sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0", - "sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299", - "sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2", - "sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac", - "sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61", - "sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931", - "sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21", - "sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3", - "sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7", - "sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96", - "sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f", - "sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243", - "sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857", - "sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f", - "sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca", - "sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488", - "sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da", - "sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948", - "sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5", - "sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934", - "sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473", - "sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7", - "sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685", - "sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e", - "sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147", - "sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71", - "sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67", - "sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04", - "sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822", - "sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11", - "sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6", - "sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0", - "sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec", - "sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda", - "sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556", - "sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4", - "sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c", - "sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f", - "sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8", - "sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba", - "sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258", - "sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95", - "sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383", - "sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e", - "sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938", - "sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374", - "sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55", - "sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139", - "sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17", - "sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217", - "sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d", - "sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d", - "sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe", - "sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199", - "sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d", - "sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8", - "sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c", - "sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29", - "sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172", - "sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860", - "sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7", - "sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170", - "sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138", - "sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06", - "sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004", - "sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159", - "sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da", - "sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988", - "sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75" + "sha256:01be8688fc211dc237e628fcc209dda412d35de7642453059a0553747018d075", + "sha256:039c299a0864d1f43c3e31570045635034ea7021db41bf4842693a72aca8df3a", + "sha256:074fee89caab89a97e18ef5f29060ef61ba3cae6cd77673acc54bfdd3214b7b7", + "sha256:13aaf2bdbc8c86ddce48626b15f4987f22e80d898818d735b20bd58f17292ee8", + "sha256:14408cc4d34e202caba7b5ac9cc84700e3421a9e2d1b157d744d101b061a4a88", + "sha256:1db1537e9cb846eb0ff206eac667f627794be8b71368c1ab3207ec7b6f8c5afc", + "sha256:1ece25e2251c28bab737bdf0519c88189b3dd9492dc086a1d77336d940c28ced", + "sha256:1ff116f0285b5c8b3b9a2680aeca29a858b3b9e0402fc79fd850b32c2bcb9f8b", + "sha256:205de377bd23365cd85562c9c6c33844050a93661640fda38e0567d2826b50df", + "sha256:20d95535e7d833889982bfe7cc321b7f63bf8879788fee982c76ae2b24cfb715", + "sha256:20de4a8b04de70c49698dc2390b7fd2d18d424d3b876371f9b775e2b462d4b41", + "sha256:2d90f2e4d16a5b0915ee065218b435d2ef619dd228973b1b47d262a6f7cd8fa5", + "sha256:2e6b4466714a73f5251d84b471475850954f1fa6acce4d3f404da1d55d644c34", + "sha256:309f8d27d6f93ceeeb80aa6980e883aa57895270f7f41842b92247e65d7aeddf", + "sha256:32141e13a1d5a48525e519c9197d3f4d9744d818d5c7d6547524cc9eccc8971e", + "sha256:34176bfb082add67cb2a20abd85854165540891147f88b687a5ed0dc225750a0", + "sha256:38b39b7b3e692b6c92b986b00137a3891eddb66311b229d1940dcbd4f025083c", + "sha256:3a3709450a574d61be6ac53d582496014342ea34876af8dc17cc16da32826c9a", + "sha256:3adaaf9c6b1b4fc258584f4443f24d775a2086aee82d1387e48a8b4f3d6aecf6", + "sha256:3f576ed278860df2721a5d57da3381040176ef1d07def9688a385c8330db61a1", + "sha256:42ba84e2ac26a3f252715f8ec17e6fdc0cbf95b9617c5367579fafcd7fba50eb", + "sha256:454902dc1830d935c90b5b53c863ba2a98dcde0fbaa31ca2ed1ad33b2a7171c6", + "sha256:466d31fd043ef9af822ee3f1df8fdff4e8c199a7f4012c2642006af240eade17", + "sha256:49a98ecadc5a241c9ba06de08127ee4796e1009555efd791bac514207862b43d", + "sha256:4d26f1fa9fa2167bb238f6f4b20218eb4e88dd3ef21bb8f97439fa6b5313e30d", + "sha256:52c136f348605974c9b1c878addd6b7a60e3bf2245833e370862009b86fa4689", + "sha256:536a7a8a53b75b2e98ff96edb2dfb91a26b81c4fed82782035767db5a465be46", + "sha256:576d258b21c1db4c6449b1c572c75d03f16a482eb380be8003682bdbe7db2f28", + "sha256:609ffd44fed2ed88d9b4ef62ee860cf86446cf066333ad4ce4123505b819e581", + "sha256:67b336c15e564d76869c9a21316f90edf546809a5796a083b8f57c845056bc01", + "sha256:685cc37f3f307c6a8e879986c6d85328f4c637f002e219f50e2ef66f7e062c1d", + "sha256:6a49ad0102c0f0ba839628d0bf45973c86ce7b590cdedf7540d5b1833ddc6f00", + "sha256:6fb64dd45453225f57d82c4764818d7a205ee31ce193e9f0086e493916bd4f72", + "sha256:701bb4a8f4de191c8c0cc9a1e6d5142f4df880e9d1210e333b829ca9425570ed", + "sha256:73553bbeea7d6ec88c08ad8027f4e992798f0abc459361bf06641c71972794dc", + "sha256:7520e799b1f84e095cce919bd6c23c9d49472deeef25fe1ef960b04cca51c3fc", + "sha256:7609b8462351c4836b3edce4201acb6dd46187b207c589b30a87ffd1813b48dc", + "sha256:7db9584235895a1dffca17e1c634b13870852094f6389b68dcc6338086aa7b08", + "sha256:7fa7d37f2ada0f42e0723632993ed422f2a679af0e200874d9d861720a54f53e", + "sha256:80741ec5b471fbdfb997821b2842c59660a1c930ceb42f8a84ba8ca0f25a66aa", + "sha256:8254dbfce84ee5d1e81051ee7a0f1536c108ba294c0fdb5933476398df0654f3", + "sha256:8b8d3e4e014fb4274f1c5bf61511d2199e263909fb0b8bda2a7428b0894e8dc6", + "sha256:8e1c18890091aa3cc8a77967943476b729dc2016f4cfe11e45d89b12519d4a93", + "sha256:9106025c7f261f9f5144f9aa7681d43867eed06349a7cfb297a1bc804de2f0d1", + "sha256:91b8fb9427e33f83ca2ba9501221ffaac1ecf0407f758c4d2f283c523da185ee", + "sha256:96404e8d5e1bbe36bdaa84ef89dc36f0e75939e060ca5cd45451aba01db02902", + "sha256:9b4c90c5363c6b0a54188122b61edb919c2cd1119684999d08cd5e538813a28e", + "sha256:a0509475d714df8f6d498935b3f307cd122c4ca76f7d426c7e1bb791bcd87eda", + "sha256:a173401d7821a2a81c7b47d4e7d5c4021375a1441af0c58611c1957445055056", + "sha256:a45d94075ac0647621eaaf693c8751813a3eccac455d423f473ffed38c8ac5c9", + "sha256:a5f72421246c21af6a92fbc8c13b6d4c5427dfd949049b937c3b731f2f9076bd", + "sha256:a64619a9c47c25582190af38e9eb382279ad42e1f06034f14d794670796016c0", + "sha256:a7ee6884a8848792d58b854946b685521f41d8871afa65e0d4a774954e9c9e89", + "sha256:ae38bd86eae3ba3d2ce5636cc9e23c80c9db2e9cb557e40b98153ed102b5a736", + "sha256:b026cf2c32daf48d90c0c4e406815c3f8f4cfe0c6dfccb094a9add1ff6a0e41a", + "sha256:b0a2074a37285570d54b55820687de3d2f2b9ecf1b714e482e48c9e7c0402038", + "sha256:b1a3297b9cad594e1ff0c040d2881d7d3a74124a3c73e00c3c71526a1234a9f7", + "sha256:b212452b80cae26cb767aa045b051740e464c5129b7bd739c58fbb7deb339e7b", + "sha256:b234a4a9248a9f000b7a5dfe84b8cb6210ee5120ae70eb72a4dcbdb4c528f72f", + "sha256:b4095c5019bb889aa866bf12ed4c85c0daea5aafcb7c20d1519f02a1e738f07f", + "sha256:b8e8c516dc4e1a51d86ac975b0350735007e554c962281c432eaa5822aa9765c", + "sha256:bd80ed29761490c622edde5dd70537ca8c992c2952eb62ed46984f8eff66d6e8", + "sha256:c083f6dd6951b86e484ebfc9c3524b49bcaa9c420cb4b2a78ef9f7a512bfcc85", + "sha256:c0f4808644baf0a434a3442df5e0bedf8d05208f0719cedcd499e168b23bfdc4", + "sha256:c4cb992d8090d5ae5f7afa6754d7211c578be0c45f54d3d94f7781c495d56716", + "sha256:c60e547c0a375c4bfcdd60eef82e7e0e8698bf84c239d715f5c1278a73050393", + "sha256:c73a6bbc97ba1b5a0c3c992ae93d721c395bdbb120492759b94cc1ac71bc6350", + "sha256:c893f8c1a6d48b25961e00922724732d00b39de8bb0b451307482dc87bddcd74", + "sha256:cd6ab7d6776c186f544f893b45ee0c883542b35e8a493db74665d2e594d3ca75", + "sha256:d89ae7de94631b60d468412c18290d358a9d805182373d804ec839978b120422", + "sha256:d9d4f5e471e8dc49b593a80766c2328257e405f943c56a3dc985c125732bc4cf", + "sha256:da206d1ec78438a563c5429ab808a2b23ad7bc025c8adbf08540dde202be37d5", + "sha256:dbf53db46f7cf176ee01d8d98c39381440776fcda13779d269a8ba664f69bec0", + "sha256:dd21c0128e301851de51bc607b0a6da50e82dc34e9601f4b508d08cc89ee7929", + "sha256:e2580c1d7e66e6d29d6e11855e3b1c6381971e0edd9a5066e6c14d79bc8967af", + "sha256:e3818eabaefb90adeb5e0f62f047310079d426387991106d4fbf3519eec7d90a", + "sha256:ed69af4fe2a0949b1ea1d012bf065c77b4c7822bad4737f17807af2adb15a73c", + "sha256:f172b8b2c72a13a06ea49225a9c47079549036ad1b34afa12d5491b881f5b993", + "sha256:f275ede6199d0f1ed4ea5d55a7b7573ccd40d97aee7808559e1298fe6efc8dbd", + "sha256:f7edeb1dcc7f50a2c8e08b9dc13a413903b7817e72273f00878cb70e766bdb3b", + "sha256:fa2c9cb607e0f660d48c54a63de7a9b36fef62f6b8bd50ff592ce1137e73ac7d", + "sha256:fe94d1de77c4cd8caff1bd5480e22342dbd54c93929f5943495d9c1e8abe9f42" ], "markers": "python_version >= '3.9'", - "version": "==1.17.1" + "version": "==1.18.0" } }, "develop": { @@ -1903,72 +1894,72 @@ }, "coverage": { "hashes": [ - "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376", - "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9", - "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111", - "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172", - "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491", - "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546", - "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2", - "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11", - "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08", - "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c", - "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2", - "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963", - "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613", - "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0", - "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db", - "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf", - "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73", - "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117", - "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1", - "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e", - "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522", - "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25", - "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc", - "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea", - "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52", - "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a", - "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07", - "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06", - "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa", - "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901", - "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b", - "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17", - "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0", - "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21", - "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19", - "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5", - "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51", - "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3", - "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3", - "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f", - "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076", - "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a", - "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718", - "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba", - "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e", - "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27", - "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e", - "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09", - "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e", - "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70", - "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f", - "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72", - "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a", - "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef", - "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b", - "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b", - "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f", - "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806", - "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b", - "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1", - "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c", - "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858" + "sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5", + "sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf", + "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb", + "sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638", + "sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4", + "sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc", + "sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed", + "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a", + "sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d", + "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649", + "sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c", + "sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b", + "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4", + "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443", + "sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83", + "sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee", + "sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e", + "sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e", + "sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3", + "sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0", + "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb", + "sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076", + "sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb", + "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787", + "sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1", + "sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e", + "sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce", + "sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801", + "sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764", + "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365", + "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf", + "sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6", + "sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71", + "sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002", + "sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4", + "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c", + "sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8", + "sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4", + "sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146", + "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc", + "sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea", + "sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4", + "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad", + "sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28", + "sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451", + "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50", + "sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779", + "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63", + "sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e", + "sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc", + "sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022", + "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d", + "sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94", + "sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b", + "sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d", + "sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331", + "sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a", + "sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0", + "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee", + "sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92", + "sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a", + "sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==7.6.4" + "version": "==7.6.8" }, "idna": { "hashes": [ @@ -1988,11 +1979,11 @@ }, "packaging": { "hashes": [ - "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", - "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], "markers": "python_version >= '3.8'", - "version": "==24.1" + "version": "==24.2" }, "pluggy": { "hashes": [ diff --git a/dbrepo-search-service/init/Pipfile.lock b/dbrepo-search-service/init/Pipfile.lock index e4cc71be85..16c987e8fc 100644 --- a/dbrepo-search-service/init/Pipfile.lock +++ b/dbrepo-search-service/init/Pipfile.lock @@ -26,100 +26,85 @@ }, "aiohttp": { "hashes": [ - "sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138", - "sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c", - "sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24", - "sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480", - "sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2", - "sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5", - "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a", - "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8", - "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf", - "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871", - "sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486", - "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9", - "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d", - "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb", - "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68", - "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1", - "sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d", - "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd", - "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1", - "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8", - "sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7", - "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959", - "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7", - "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42", - "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79", - "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38", - "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a", - "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8", - "sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8", - "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151", - "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6", - "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e", - "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7", - "sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce", - "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b", - "sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8", - "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628", - "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f", - "sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a", - "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7", - "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc", - "sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab", - "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b", - "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911", - "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9", - "sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572", - "sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554", - "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d", - "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257", - "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c", - "sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b", - "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742", - "sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090", - "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6", - "sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc", - "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142", - "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16", - "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a", - "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28", - "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e", - "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94", - "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026", - "sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb", - "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28", - "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9", - "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3", - "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f", - "sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983", - "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205", - "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f", - "sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa", - "sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c", - "sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2", - "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb", - "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67", - "sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762", - "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a", - "sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8", - "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a", - "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a", - "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc", - "sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91", - "sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23", - "sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527", - "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6", - "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c", - "sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7", - "sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f", - "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a", - "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092", - "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414" + "sha256:018f1b04883a12e77e7fc161934c0f298865d3a484aea536a6a2ca8d909f0ba0", + "sha256:01a8aca4af3da85cea5c90141d23f4b0eee3cbecfd33b029a45a80f28c66c668", + "sha256:04b0cc74d5a882c9dacaeeccc1444f0233212b6f5be8bc90833feef1e1ce14b9", + "sha256:0de6466b9d742b4ee56fe1b2440706e225eb48c77c63152b1584864a236e7a50", + "sha256:12724f3a211fa243570e601f65a8831372caf1a149d2f1859f68479f07efec3d", + "sha256:12e4d45847a174f77b2b9919719203769f220058f642b08504cf8b1cf185dacf", + "sha256:17829f37c0d31d89aa6b8b010475a10233774771f9b6dc2cc352ea4f8ce95d9a", + "sha256:1a17f6a230f81eb53282503823f59d61dff14fb2a93847bf0399dc8e87817307", + "sha256:1cf03d27885f8c5ebf3993a220cc84fc66375e1e6e812731f51aab2b2748f4a6", + "sha256:1fbf41a6bbc319a7816ae0f0177c265b62f2a59ad301a0e49b395746eb2a9884", + "sha256:2257bdd5cf54a4039a4337162cd8048f05a724380a2283df34620f55d4e29341", + "sha256:24054fce8c6d6f33a3e35d1c603ef1b91bbcba73e3f04a22b4f2f27dac59b347", + "sha256:241a6ca732d2766836d62c58c49ca7a93d08251daef0c1e3c850df1d1ca0cbc4", + "sha256:28c7af3e50e5903d21d7b935aceed901cc2475463bc16ddd5587653548661fdb", + "sha256:351849aca2c6f814575c1a485c01c17a4240413f960df1bf9f5deb0003c61a53", + "sha256:3ce18f703b7298e7f7633efd6a90138d99a3f9a656cb52c1201e76cb5d79cf08", + "sha256:3d1c9c15d3999107cbb9b2d76ca6172e6710a12fda22434ee8bd3f432b7b17e8", + "sha256:3dd3e7e7c9ef3e7214f014f1ae260892286647b3cf7c7f1b644a568fd410f8ca", + "sha256:43bfd25113c1e98aec6c70e26d5f4331efbf4aa9037ba9ad88f090853bf64d7f", + "sha256:43dd89a6194f6ab02a3fe36b09e42e2df19c211fc2050ce37374d96f39604997", + "sha256:481f10a1a45c5f4c4a578bbd74cff22eb64460a6549819242a87a80788461fba", + "sha256:4ba8d043fed7ffa117024d7ba66fdea011c0e7602327c6d73cacaea38abe4491", + "sha256:4bb7493c3e3a36d3012b8564bd0e2783259ddd7ef3a81a74f0dbfa000fce48b7", + "sha256:4c1a6309005acc4b2bcc577ba3b9169fea52638709ffacbd071f3503264620da", + "sha256:4dda726f89bfa5c465ba45b76515135a3ece0088dfa2da49b8bb278f3bdeea12", + "sha256:53c921b58fdc6485d6b2603e0132bb01cd59b8f0620ffc0907f525e0ba071687", + "sha256:5578cf40440eafcb054cf859964bc120ab52ebe0e0562d2b898126d868749629", + "sha256:59ee1925b5a5efdf6c4e7be51deee93984d0ac14a6897bd521b498b9916f1544", + "sha256:670847ee6aeb3a569cd7cdfbe0c3bec1d44828bbfbe78c5d305f7f804870ef9e", + "sha256:78c657ece7a73b976905ab9ec8be9ef2df12ed8984c24598a1791c58ce3b4ce4", + "sha256:7a9318da4b4ada9a67c1dd84d1c0834123081e746bee311a16bb449f363d965e", + "sha256:7b2f8107a3c329789f3c00b2daad0e35f548d0a55cda6291579136622099a46e", + "sha256:7ea4490360b605804bea8173d2d086b6c379d6bb22ac434de605a9cbce006e7d", + "sha256:8360c7cc620abb320e1b8d603c39095101391a82b1d0be05fb2225471c9c5c52", + "sha256:875f7100ce0e74af51d4139495eec4025affa1a605280f23990b6434b81df1bd", + "sha256:8bedb1f6cb919af3b6353921c71281b1491f948ca64408871465d889b4ee1b66", + "sha256:8d20cfe63a1c135d26bde8c1d0ea46fd1200884afbc523466d2f1cf517d1fe33", + "sha256:9202f184cc0582b1db15056f2225ab4c1e3dac4d9ade50dd0613ac3c46352ac2", + "sha256:9acfc7f652b31853eed3b92095b0acf06fd5597eeea42e939bd23a17137679d5", + "sha256:9d18a8b44ec8502a7fde91446cd9c9b95ce7c49f1eacc1fb2358b8907d4369fd", + "sha256:9e67531370a3b07e49b280c1f8c2df67985c790ad2834d1b288a2f13cd341c5f", + "sha256:9ee6a4cdcbf54b8083dc9723cdf5f41f722c00db40ccf9ec2616e27869151129", + "sha256:a7d9a606355655617fee25dd7e54d3af50804d002f1fd3118dd6312d26692d70", + "sha256:aa3705a8d14de39898da0fbad920b2a37b7547c3afd2a18b9b81f0223b7d0f68", + "sha256:b7215bf2b53bc6cb35808149980c2ae80a4ae4e273890ac85459c014d5aa60ac", + "sha256:badda65ac99555791eed75e234afb94686ed2317670c68bff8a4498acdaee935", + "sha256:bf0e6cce113596377cadda4e3ac5fb89f095bd492226e46d91b4baef1dd16f60", + "sha256:c171fc35d3174bbf4787381716564042a4cbc008824d8195eede3d9b938e29a8", + "sha256:c1f6490dd1862af5aae6cfcf2a274bffa9a5b32a8f5acb519a7ecf5a99a88866", + "sha256:c25b74a811dba37c7ea6a14d99eb9402d89c8d739d50748a75f3cf994cf19c43", + "sha256:c6095aaf852c34f42e1bd0cf0dc32d1e4b48a90bfb5054abdbb9d64b36acadcb", + "sha256:c63f898f683d1379b9be5afc3dd139e20b30b0b1e0bf69a3fc3681f364cf1629", + "sha256:cd8d62cab363dfe713067027a5adb4907515861f1e4ce63e7be810b83668b847", + "sha256:ce91a24aac80de6be8512fb1c4838a9881aa713f44f4e91dd7bb3b34061b497d", + "sha256:cea52d11e02123f125f9055dfe0ccf1c3857225fb879e4a944fae12989e2aef2", + "sha256:cf4efa2d01f697a7dbd0509891a286a4af0d86902fc594e20e3b1712c28c0106", + "sha256:d2fa6fc7cc865d26ff42480ac9b52b8c9b7da30a10a6442a9cdf429de840e949", + "sha256:d329300fb23e14ed1f8c6d688dfd867d1dcc3b1d7cd49b7f8c5b44e797ce0932", + "sha256:d6177077a31b1aecfc3c9070bd2f11419dbb4a70f30f4c65b124714f525c2e48", + "sha256:db37248535d1ae40735d15bdf26ad43be19e3d93ab3f3dad8507eb0f85bb8124", + "sha256:db70a47987e34494b451a334605bee57a126fe8d290511349e86810b4be53b01", + "sha256:dcefcf2915a2dbdbce37e2fc1622129a1918abfe3d06721ce9f6cdac9b6d2eaa", + "sha256:dda3ed0a7869d2fa16aa41f9961ade73aa2c2e3b2fcb0a352524e7b744881889", + "sha256:e0bf378db07df0a713a1e32381a1b277e62ad106d0dbe17b5479e76ec706d720", + "sha256:e13a05db87d3b241c186d0936808d0e4e12decc267c617d54e9c643807e968b6", + "sha256:e143b0ef9cb1a2b4f74f56d4fbe50caa7c2bb93390aff52f9398d21d89bc73ea", + "sha256:e22d1721c978a6494adc824e0916f9d187fa57baeda34b55140315fa2f740184", + "sha256:e5522ee72f95661e79db691310290c4618b86dff2d9b90baedf343fd7a08bf79", + "sha256:e993676c71288618eb07e20622572b1250d8713e7e00ab3aabae28cb70f3640d", + "sha256:ee9afa1b0d2293c46954f47f33e150798ad68b78925e3710044e0d67a9487791", + "sha256:f1ac5462582d6561c1c1708853a9faf612ff4e5ea5e679e99be36143d6eabd8e", + "sha256:f5022504adab881e2d801a88b748ea63f2a9d130e0b2c430824682a96f6534be", + "sha256:f5b973cce96793725ef63eb449adfb74f99c043c718acb76e0d2a447ae369962", + "sha256:f7c58a240260822dc07f6ae32a0293dd5bccd618bb2d0f36d51c5dbd526f89c0", + "sha256:fc6da202068e0a268e298d7cd09b6e9f3997736cd9b060e2750963754552a0a9", + "sha256:fdadc3f6a32d6eca45f9a900a254757fd7855dfb2d8f8dcf0e88f0fae3ff8eb1" ], - "markers": "python_version >= '3.8'", - "version": "==3.10.10" + "markers": "python_version >= '3.9'", + "version": "==3.11.7" }, "aiosignal": { "hashes": [ @@ -147,11 +132,11 @@ }, "blinker": { "hashes": [ - "sha256:1779309f71bf239144b9399d06ae925637cf6634cf6bd131104184531bf67c01", - "sha256:8f77b09d3bf7c795e969e9486f39c2c5e9c39d4ee07424be2bc594ece9642d83" + "sha256:b4ce2265a7abece45e7cc896e98dbebe6cead56bcf805a3d23136d145f5445bf", + "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc" ], - "markers": "python_version >= '3.8'", - "version": "==1.8.2" + "markers": "python_version >= '3.9'", + "version": "==1.9.0" }, "certifi": { "hashes": [ @@ -678,11 +663,11 @@ }, "packaging": { "hashes": [ - "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", - "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], "markers": "python_version >= '3.8'", - "version": "==24.1" + "version": "==24.2" }, "pandas": { "hashes": [ @@ -854,106 +839,117 @@ }, "pydantic": { "hashes": [ - "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f", - "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12" + "sha256:a4daca2dc0aa429555e0656d6bf94873a7dc5f54ee42b1f5873d666fb3f35560", + "sha256:a8d20db84de64cf4a7d59e899c2caf0fe9d660c7cfc482528e7020d7dd189a7e" ], "markers": "python_version >= '3.8'", - "version": "==2.9.2" + "version": "==2.10.1" }, "pydantic-core": { "hashes": [ - "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36", - "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05", - "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071", - "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327", - "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c", - "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36", - "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29", - "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744", - "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d", - "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec", - "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e", - "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e", - "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577", - "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232", - "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863", - "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6", - "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368", - "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480", - "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2", - "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2", - "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6", - "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769", - "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d", - "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2", - "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84", - "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166", - "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271", - "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5", - "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb", - "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13", - "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323", - "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556", - "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665", - "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef", - "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb", - "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119", - "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126", - "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510", - "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b", - "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87", - "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f", - "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc", - "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8", - "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21", - "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f", - "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6", - "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658", - "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b", - "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3", - "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb", - "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59", - "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24", - "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9", - "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3", - "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd", - "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753", - "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55", - "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad", - "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a", - "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605", - "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e", - "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b", - "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433", - "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8", - "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07", - "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728", - "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0", - "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327", - "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555", - "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64", - "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6", - "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea", - "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b", - "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df", - "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e", - "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd", - "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068", - "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3", - "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040", - "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12", - "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916", - "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f", - "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f", - "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801", - "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231", - "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5", - "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8", - "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee", - "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607" + "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9", + "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b", + "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c", + "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529", + "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc", + "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854", + "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d", + "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278", + "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a", + "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c", + "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f", + "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27", + "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f", + "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac", + "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2", + "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97", + "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a", + "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919", + "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9", + "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4", + "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c", + "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131", + "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5", + "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd", + "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089", + "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107", + "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6", + "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60", + "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf", + "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5", + "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08", + "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05", + "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2", + "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e", + "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c", + "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17", + "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62", + "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23", + "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be", + "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067", + "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02", + "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f", + "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235", + "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840", + "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5", + "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807", + "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16", + "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c", + "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864", + "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e", + "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a", + "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35", + "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737", + "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a", + "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3", + "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52", + "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05", + "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31", + "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89", + "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de", + "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6", + "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36", + "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c", + "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154", + "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb", + "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e", + "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd", + "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3", + "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f", + "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78", + "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960", + "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618", + "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08", + "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4", + "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c", + "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c", + "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330", + "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8", + "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792", + "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025", + "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9", + "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f", + "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01", + "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337", + "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4", + "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f", + "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd", + "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51", + "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab", + "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc", + "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676", + "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381", + "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed", + "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb", + "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967", + "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073", + "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae", + "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c", + "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206", + "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b" ], "markers": "python_version >= '3.8'", - "version": "==2.23.4" + "version": "==2.27.1" }, "pyparsing": { "hashes": [ @@ -1057,7 +1053,7 @@ "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8" ], - "markers": "python_version < '3.13'", + "markers": "python_version >= '3.8'", "version": "==4.12.2" }, "tzdata": { @@ -1078,246 +1074,241 @@ }, "werkzeug": { "hashes": [ - "sha256:4f7d1a5de312c810a8a2c6f0b47e9f6a7cffb7c8322def35e4d4d9841ff85597", - "sha256:f471a4cd167233077e9d2a8190c3471c5bc520c636a9e3c1e9300c33bced03bc" + "sha256:54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e", + "sha256:60723ce945c19328679790e3282cc758aa4a6040e4bb330f53d30fa546d44746" ], "markers": "python_version >= '3.9'", - "version": "==3.1.2" + "version": "==3.1.3" }, "wrapt": { "hashes": [ - "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc", - "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81", - "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09", - "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e", - "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca", - "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0", - "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb", - "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487", - "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40", - "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c", - "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060", - "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202", - "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41", - "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9", - "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b", - "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664", - "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d", - "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362", - "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00", - "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc", - "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1", - "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267", - "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956", - "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966", - "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1", - "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228", - "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72", - "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d", - "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292", - "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0", - "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0", - "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36", - "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c", - "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5", - "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f", - "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73", - "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b", - "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2", - "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593", - "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39", - "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389", - "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf", - "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf", - "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89", - "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c", - "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c", - "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f", - "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440", - "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465", - "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136", - "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b", - "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8", - "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3", - "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8", - "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6", - "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e", - "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f", - "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c", - "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e", - "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8", - "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2", - "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020", - "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35", - "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d", - "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3", - "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537", - "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809", - "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d", - "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a", - "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4" + "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d", + "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301", + "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635", + "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a", + "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed", + "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721", + "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801", + "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b", + "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1", + "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88", + "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8", + "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0", + "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f", + "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578", + "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7", + "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045", + "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada", + "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d", + "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b", + "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a", + "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977", + "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea", + "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346", + "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13", + "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22", + "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339", + "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9", + "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181", + "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c", + "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90", + "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a", + "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489", + "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f", + "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504", + "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea", + "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569", + "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4", + "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce", + "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab", + "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a", + "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f", + "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c", + "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9", + "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf", + "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d", + "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627", + "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d", + "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4", + "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c", + "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d", + "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad", + "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b", + "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33", + "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371", + "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1", + "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393", + "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106", + "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df", + "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379", + "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451", + "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b", + "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575", + "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed", + "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb", + "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838" ], - "markers": "python_version >= '3.6'", - "version": "==1.16.0" + "markers": "python_version >= '3.8'", + "version": "==1.17.0" }, "yarl": { "hashes": [ - "sha256:06157fb3c58f2736a5e47c8fcbe1afc8b5de6fb28b14d25574af9e62150fcaac", - "sha256:067a63fcfda82da6b198fa73079b1ca40b7c9b7994995b6ee38acda728b64d47", - "sha256:0b1794853124e2f663f0ea54efb0340b457f08d40a1cef78edfa086576179c91", - "sha256:0bdff5e0995522706c53078f531fb586f56de9c4c81c243865dd5c66c132c3b5", - "sha256:117ed8b3732528a1e41af3aa6d4e08483c2f0f2e3d3d7dca7cf538b3516d93df", - "sha256:14bc88baa44e1f84164a392827b5defb4fa8e56b93fecac3d15315e7c8e5d8b3", - "sha256:1654ec814b18be1af2c857aa9000de7a601400bd4c9ca24629b18486c2e35463", - "sha256:16bca6678a83657dd48df84b51bd56a6c6bd401853aef6d09dc2506a78484c7b", - "sha256:1a3b91c44efa29e6c8ef8a9a2b583347998e2ba52c5d8280dbd5919c02dfc3b5", - "sha256:1a52a1ffdd824fb1835272e125385c32fd8b17fbdefeedcb4d543cc23b332d74", - "sha256:1ce36ded585f45b1e9bb36d0ae94765c6608b43bd2e7f5f88079f7a85c61a4d3", - "sha256:299f11b44d8d3a588234adbe01112126010bd96d9139c3ba7b3badd9829261c3", - "sha256:2b24ec55fad43e476905eceaf14f41f6478780b870eda5d08b4d6de9a60b65b4", - "sha256:2d374d70fdc36f5863b84e54775452f68639bc862918602d028f89310a034ab0", - "sha256:2d9f0606baaec5dd54cb99667fcf85183a7477f3766fbddbe3f385e7fc253299", - "sha256:2e7ba4c9377e48fb7b20dedbd473cbcbc13e72e1826917c185157a137dac9df2", - "sha256:2f0a6423295a0d282d00e8701fe763eeefba8037e984ad5de44aa349002562ac", - "sha256:327828786da2006085a4d1feb2594de6f6d26f8af48b81eb1ae950c788d97f61", - "sha256:380e6c38ef692b8fd5a0f6d1fa8774d81ebc08cfbd624b1bca62a4d4af2f9931", - "sha256:3b74ff4767d3ef47ffe0cd1d89379dc4d828d4873e5528976ced3b44fe5b0a21", - "sha256:3e844be8d536afa129366d9af76ed7cb8dfefec99f5f1c9e4f8ae542279a6dc3", - "sha256:459e81c2fb920b5f5df744262d1498ec2c8081acdcfe18181da44c50f51312f7", - "sha256:46ddf6e0b975cd680eb83318aa1d321cb2bf8d288d50f1754526230fcf59ba96", - "sha256:482c122b72e3c5ec98f11457aeb436ae4aecca75de19b3d1de7cf88bc40db82f", - "sha256:561c87fea99545ef7d692403c110b2f99dced6dff93056d6e04384ad3bc46243", - "sha256:578d00c9b7fccfa1745a44f4eddfdc99d723d157dad26764538fbdda37209857", - "sha256:58c8e9620eb82a189c6c40cb6b59b4e35b2ee68b1f2afa6597732a2b467d7e8f", - "sha256:5b29beab10211a746f9846baa39275e80034e065460d99eb51e45c9a9495bcca", - "sha256:5d1d42556b063d579cae59e37a38c61f4402b47d70c29f0ef15cee1acaa64488", - "sha256:5f236cb5999ccd23a0ab1bd219cfe0ee3e1c1b65aaf6dd3320e972f7ec3a39da", - "sha256:62a91aefff3d11bf60e5956d340eb507a983a7ec802b19072bb989ce120cd948", - "sha256:64cc6e97f14cf8a275d79c5002281f3040c12e2e4220623b5759ea7f9868d6a5", - "sha256:6f4c9156c4d1eb490fe374fb294deeb7bc7eaccda50e23775b2354b6a6739934", - "sha256:7294e38f9aa2e9f05f765b28ffdc5d81378508ce6dadbe93f6d464a8c9594473", - "sha256:7615058aabad54416ddac99ade09a5510cf77039a3b903e94e8922f25ed203d7", - "sha256:7e48cdb8226644e2fbd0bdb0a0f87906a3db07087f4de77a1b1b1ccfd9e93685", - "sha256:7f63d176a81555984e91f2c84c2a574a61cab7111cc907e176f0f01538e9ff6e", - "sha256:7f6595c852ca544aaeeb32d357e62c9c780eac69dcd34e40cae7b55bc4fb1147", - "sha256:7fac95714b09da9278a0b52e492466f773cfe37651cf467a83a1b659be24bf71", - "sha256:81713b70bea5c1386dc2f32a8f0dab4148a2928c7495c808c541ee0aae614d67", - "sha256:846dd2e1243407133d3195d2d7e4ceefcaa5f5bf7278f0a9bda00967e6326b04", - "sha256:84c063af19ef5130084db70ada40ce63a84f6c1ef4d3dbc34e5e8c4febb20822", - "sha256:881764d610e3269964fc4bb3c19bb6fce55422828e152b885609ec176b41cf11", - "sha256:8994b29c462de9a8fce2d591028b986dbbe1b32f3ad600b2d3e1c482c93abad6", - "sha256:8c79e9d7e3d8a32d4824250a9c6401194fb4c2ad9a0cec8f6a96e09a582c2cc0", - "sha256:8ee427208c675f1b6e344a1f89376a9613fc30b52646a04ac0c1f6587c7e46ec", - "sha256:949681f68e0e3c25377462be4b658500e85ca24323d9619fdc41f68d46a1ffda", - "sha256:9e275792097c9f7e80741c36de3b61917aebecc08a67ae62899b074566ff8556", - "sha256:9fb815155aac6bfa8d86184079652c9715c812d506b22cfa369196ef4e99d1b4", - "sha256:a2a64e62c7a0edd07c1c917b0586655f3362d2c2d37d474db1a509efb96fea1c", - "sha256:a7ac5b4984c468ce4f4a553df281450df0a34aefae02e58d77a0847be8d1e11f", - "sha256:aa46dce75078fceaf7cecac5817422febb4355fbdda440db55206e3bd288cfb8", - "sha256:ae3476e934b9d714aa8000d2e4c01eb2590eee10b9d8cd03e7983ad65dfbfcba", - "sha256:b0341e6d9a0c0e3cdc65857ef518bb05b410dbd70d749a0d33ac0f39e81a4258", - "sha256:b40d1bf6e6f74f7c0a567a9e5e778bbd4699d1d3d2c0fe46f4b717eef9e96b95", - "sha256:b5c4804e4039f487e942c13381e6c27b4b4e66066d94ef1fae3f6ba8b953f383", - "sha256:b5d6a6c9602fd4598fa07e0389e19fe199ae96449008d8304bf5d47cb745462e", - "sha256:b5f1ac7359e17efe0b6e5fec21de34145caef22b260e978336f325d5c84e6938", - "sha256:c0167540094838ee9093ef6cc2c69d0074bbf84a432b4995835e8e5a0d984374", - "sha256:c180ac742a083e109c1a18151f4dd8675f32679985a1c750d2ff806796165b55", - "sha256:c73df5b6e8fabe2ddb74876fb82d9dd44cbace0ca12e8861ce9155ad3c886139", - "sha256:c7e177c619342e407415d4f35dec63d2d134d951e24b5166afcdfd1362828e17", - "sha256:cbad927ea8ed814622305d842c93412cb47bd39a496ed0f96bfd42b922b4a217", - "sha256:cc353841428d56b683a123a813e6a686e07026d6b1c5757970a877195f880c2d", - "sha256:cc7c92c1baa629cb03ecb0c3d12564f172218fb1739f54bf5f3881844daadc6d", - "sha256:cc7d768260f4ba4ea01741c1b5fe3d3a6c70eb91c87f4c8761bbcce5181beafe", - "sha256:d0eea830b591dbc68e030c86a9569826145df485b2b4554874b07fea1275a199", - "sha256:d216e5d9b8749563c7f2c6f7a0831057ec844c68b4c11cb10fc62d4fd373c26d", - "sha256:d401f07261dc5aa36c2e4efc308548f6ae943bfff20fcadb0a07517a26b196d8", - "sha256:d6324274b4e0e2fa1b3eccb25997b1c9ed134ff61d296448ab8269f5ac068c4c", - "sha256:d8a8b74d843c2638f3864a17d97a4acda58e40d3e44b6303b8cc3d3c44ae2d29", - "sha256:d9b6b28a57feb51605d6ae5e61a9044a31742db557a3b851a74c13bc61de5172", - "sha256:de599af166970d6a61accde358ec9ded821234cbbc8c6413acfec06056b8e860", - "sha256:e594b22688d5747b06e957f1ef822060cb5cb35b493066e33ceac0cf882188b7", - "sha256:e5b078134f48552c4d9527db2f7da0b5359abd49393cdf9794017baec7506170", - "sha256:eb6dce402734575e1a8cc0bb1509afca508a400a57ce13d306ea2c663bad1138", - "sha256:f1790a4b1e8e8e028c391175433b9c8122c39b46e1663228158e61e6f915bf06", - "sha256:f5efe0661b9fcd6246f27957f6ae1c0eb29bc60552820f01e970b4996e016004", - "sha256:f9cbfbc5faca235fbdf531b93aa0f9f005ec7d267d9d738761a4d42b744ea159", - "sha256:fbea1751729afe607d84acfd01efd95e3b31db148a181a441984ce9b3d3469da", - "sha256:fca4b4307ebe9c3ec77a084da3a9d1999d164693d16492ca2b64594340999988", - "sha256:ff5c6771c7e3511a06555afa317879b7db8d640137ba55d6ab0d0c50425cab75" + "sha256:01be8688fc211dc237e628fcc209dda412d35de7642453059a0553747018d075", + "sha256:039c299a0864d1f43c3e31570045635034ea7021db41bf4842693a72aca8df3a", + "sha256:074fee89caab89a97e18ef5f29060ef61ba3cae6cd77673acc54bfdd3214b7b7", + "sha256:13aaf2bdbc8c86ddce48626b15f4987f22e80d898818d735b20bd58f17292ee8", + "sha256:14408cc4d34e202caba7b5ac9cc84700e3421a9e2d1b157d744d101b061a4a88", + "sha256:1db1537e9cb846eb0ff206eac667f627794be8b71368c1ab3207ec7b6f8c5afc", + "sha256:1ece25e2251c28bab737bdf0519c88189b3dd9492dc086a1d77336d940c28ced", + "sha256:1ff116f0285b5c8b3b9a2680aeca29a858b3b9e0402fc79fd850b32c2bcb9f8b", + "sha256:205de377bd23365cd85562c9c6c33844050a93661640fda38e0567d2826b50df", + "sha256:20d95535e7d833889982bfe7cc321b7f63bf8879788fee982c76ae2b24cfb715", + "sha256:20de4a8b04de70c49698dc2390b7fd2d18d424d3b876371f9b775e2b462d4b41", + "sha256:2d90f2e4d16a5b0915ee065218b435d2ef619dd228973b1b47d262a6f7cd8fa5", + "sha256:2e6b4466714a73f5251d84b471475850954f1fa6acce4d3f404da1d55d644c34", + "sha256:309f8d27d6f93ceeeb80aa6980e883aa57895270f7f41842b92247e65d7aeddf", + "sha256:32141e13a1d5a48525e519c9197d3f4d9744d818d5c7d6547524cc9eccc8971e", + "sha256:34176bfb082add67cb2a20abd85854165540891147f88b687a5ed0dc225750a0", + "sha256:38b39b7b3e692b6c92b986b00137a3891eddb66311b229d1940dcbd4f025083c", + "sha256:3a3709450a574d61be6ac53d582496014342ea34876af8dc17cc16da32826c9a", + "sha256:3adaaf9c6b1b4fc258584f4443f24d775a2086aee82d1387e48a8b4f3d6aecf6", + "sha256:3f576ed278860df2721a5d57da3381040176ef1d07def9688a385c8330db61a1", + "sha256:42ba84e2ac26a3f252715f8ec17e6fdc0cbf95b9617c5367579fafcd7fba50eb", + "sha256:454902dc1830d935c90b5b53c863ba2a98dcde0fbaa31ca2ed1ad33b2a7171c6", + "sha256:466d31fd043ef9af822ee3f1df8fdff4e8c199a7f4012c2642006af240eade17", + "sha256:49a98ecadc5a241c9ba06de08127ee4796e1009555efd791bac514207862b43d", + "sha256:4d26f1fa9fa2167bb238f6f4b20218eb4e88dd3ef21bb8f97439fa6b5313e30d", + "sha256:52c136f348605974c9b1c878addd6b7a60e3bf2245833e370862009b86fa4689", + "sha256:536a7a8a53b75b2e98ff96edb2dfb91a26b81c4fed82782035767db5a465be46", + "sha256:576d258b21c1db4c6449b1c572c75d03f16a482eb380be8003682bdbe7db2f28", + "sha256:609ffd44fed2ed88d9b4ef62ee860cf86446cf066333ad4ce4123505b819e581", + "sha256:67b336c15e564d76869c9a21316f90edf546809a5796a083b8f57c845056bc01", + "sha256:685cc37f3f307c6a8e879986c6d85328f4c637f002e219f50e2ef66f7e062c1d", + "sha256:6a49ad0102c0f0ba839628d0bf45973c86ce7b590cdedf7540d5b1833ddc6f00", + "sha256:6fb64dd45453225f57d82c4764818d7a205ee31ce193e9f0086e493916bd4f72", + "sha256:701bb4a8f4de191c8c0cc9a1e6d5142f4df880e9d1210e333b829ca9425570ed", + "sha256:73553bbeea7d6ec88c08ad8027f4e992798f0abc459361bf06641c71972794dc", + "sha256:7520e799b1f84e095cce919bd6c23c9d49472deeef25fe1ef960b04cca51c3fc", + "sha256:7609b8462351c4836b3edce4201acb6dd46187b207c589b30a87ffd1813b48dc", + "sha256:7db9584235895a1dffca17e1c634b13870852094f6389b68dcc6338086aa7b08", + "sha256:7fa7d37f2ada0f42e0723632993ed422f2a679af0e200874d9d861720a54f53e", + "sha256:80741ec5b471fbdfb997821b2842c59660a1c930ceb42f8a84ba8ca0f25a66aa", + "sha256:8254dbfce84ee5d1e81051ee7a0f1536c108ba294c0fdb5933476398df0654f3", + "sha256:8b8d3e4e014fb4274f1c5bf61511d2199e263909fb0b8bda2a7428b0894e8dc6", + "sha256:8e1c18890091aa3cc8a77967943476b729dc2016f4cfe11e45d89b12519d4a93", + "sha256:9106025c7f261f9f5144f9aa7681d43867eed06349a7cfb297a1bc804de2f0d1", + "sha256:91b8fb9427e33f83ca2ba9501221ffaac1ecf0407f758c4d2f283c523da185ee", + "sha256:96404e8d5e1bbe36bdaa84ef89dc36f0e75939e060ca5cd45451aba01db02902", + "sha256:9b4c90c5363c6b0a54188122b61edb919c2cd1119684999d08cd5e538813a28e", + "sha256:a0509475d714df8f6d498935b3f307cd122c4ca76f7d426c7e1bb791bcd87eda", + "sha256:a173401d7821a2a81c7b47d4e7d5c4021375a1441af0c58611c1957445055056", + "sha256:a45d94075ac0647621eaaf693c8751813a3eccac455d423f473ffed38c8ac5c9", + "sha256:a5f72421246c21af6a92fbc8c13b6d4c5427dfd949049b937c3b731f2f9076bd", + "sha256:a64619a9c47c25582190af38e9eb382279ad42e1f06034f14d794670796016c0", + "sha256:a7ee6884a8848792d58b854946b685521f41d8871afa65e0d4a774954e9c9e89", + "sha256:ae38bd86eae3ba3d2ce5636cc9e23c80c9db2e9cb557e40b98153ed102b5a736", + "sha256:b026cf2c32daf48d90c0c4e406815c3f8f4cfe0c6dfccb094a9add1ff6a0e41a", + "sha256:b0a2074a37285570d54b55820687de3d2f2b9ecf1b714e482e48c9e7c0402038", + "sha256:b1a3297b9cad594e1ff0c040d2881d7d3a74124a3c73e00c3c71526a1234a9f7", + "sha256:b212452b80cae26cb767aa045b051740e464c5129b7bd739c58fbb7deb339e7b", + "sha256:b234a4a9248a9f000b7a5dfe84b8cb6210ee5120ae70eb72a4dcbdb4c528f72f", + "sha256:b4095c5019bb889aa866bf12ed4c85c0daea5aafcb7c20d1519f02a1e738f07f", + "sha256:b8e8c516dc4e1a51d86ac975b0350735007e554c962281c432eaa5822aa9765c", + "sha256:bd80ed29761490c622edde5dd70537ca8c992c2952eb62ed46984f8eff66d6e8", + "sha256:c083f6dd6951b86e484ebfc9c3524b49bcaa9c420cb4b2a78ef9f7a512bfcc85", + "sha256:c0f4808644baf0a434a3442df5e0bedf8d05208f0719cedcd499e168b23bfdc4", + "sha256:c4cb992d8090d5ae5f7afa6754d7211c578be0c45f54d3d94f7781c495d56716", + "sha256:c60e547c0a375c4bfcdd60eef82e7e0e8698bf84c239d715f5c1278a73050393", + "sha256:c73a6bbc97ba1b5a0c3c992ae93d721c395bdbb120492759b94cc1ac71bc6350", + "sha256:c893f8c1a6d48b25961e00922724732d00b39de8bb0b451307482dc87bddcd74", + "sha256:cd6ab7d6776c186f544f893b45ee0c883542b35e8a493db74665d2e594d3ca75", + "sha256:d89ae7de94631b60d468412c18290d358a9d805182373d804ec839978b120422", + "sha256:d9d4f5e471e8dc49b593a80766c2328257e405f943c56a3dc985c125732bc4cf", + "sha256:da206d1ec78438a563c5429ab808a2b23ad7bc025c8adbf08540dde202be37d5", + "sha256:dbf53db46f7cf176ee01d8d98c39381440776fcda13779d269a8ba664f69bec0", + "sha256:dd21c0128e301851de51bc607b0a6da50e82dc34e9601f4b508d08cc89ee7929", + "sha256:e2580c1d7e66e6d29d6e11855e3b1c6381971e0edd9a5066e6c14d79bc8967af", + "sha256:e3818eabaefb90adeb5e0f62f047310079d426387991106d4fbf3519eec7d90a", + "sha256:ed69af4fe2a0949b1ea1d012bf065c77b4c7822bad4737f17807af2adb15a73c", + "sha256:f172b8b2c72a13a06ea49225a9c47079549036ad1b34afa12d5491b881f5b993", + "sha256:f275ede6199d0f1ed4ea5d55a7b7573ccd40d97aee7808559e1298fe6efc8dbd", + "sha256:f7edeb1dcc7f50a2c8e08b9dc13a413903b7817e72273f00878cb70e766bdb3b", + "sha256:fa2c9cb607e0f660d48c54a63de7a9b36fef62f6b8bd50ff592ce1137e73ac7d", + "sha256:fe94d1de77c4cd8caff1bd5480e22342dbd54c93929f5943495d9c1e8abe9f42" ], "markers": "python_version >= '3.9'", - "version": "==1.17.1" + "version": "==1.18.0" } }, "develop": { "coverage": { "hashes": [ - "sha256:00a1d69c112ff5149cabe60d2e2ee948752c975d95f1e1096742e6077affd376", - "sha256:023bf8ee3ec6d35af9c1c6ccc1d18fa69afa1cb29eaac57cb064dbb262a517f9", - "sha256:0294ca37f1ba500667b1aef631e48d875ced93ad5e06fa665a3295bdd1d95111", - "sha256:06babbb8f4e74b063dbaeb74ad68dfce9186c595a15f11f5d5683f748fa1d172", - "sha256:0809082ee480bb8f7416507538243c8863ac74fd8a5d2485c46f0f7499f2b491", - "sha256:0b3fb02fe73bed561fa12d279a417b432e5b50fe03e8d663d61b3d5990f29546", - "sha256:0b58c672d14f16ed92a48db984612f5ce3836ae7d72cdd161001cc54512571f2", - "sha256:0bcd1069e710600e8e4cf27f65c90c7843fa8edfb4520fb0ccb88894cad08b11", - "sha256:1032e178b76a4e2b5b32e19d0fd0abbce4b58e77a1ca695820d10e491fa32b08", - "sha256:11a223a14e91a4693d2d0755c7a043db43d96a7450b4f356d506c2562c48642c", - "sha256:12394842a3a8affa3ba62b0d4ab7e9e210c5e366fbac3e8b2a68636fb19892c2", - "sha256:182e6cd5c040cec0a1c8d415a87b67ed01193ed9ad458ee427741c7d8513d963", - "sha256:1d5b8007f81b88696d06f7df0cb9af0d3b835fe0c8dbf489bad70b45f0e45613", - "sha256:1f76846299ba5c54d12c91d776d9605ae33f8ae2b9d1d3c3703cf2db1a67f2c0", - "sha256:27fb4a050aaf18772db513091c9c13f6cb94ed40eacdef8dad8411d92d9992db", - "sha256:29155cd511ee058e260db648b6182c419422a0d2e9a4fa44501898cf918866cf", - "sha256:29fc0f17b1d3fea332f8001d4558f8214af7f1d87a345f3a133c901d60347c73", - "sha256:2b6b4c83d8e8ea79f27ab80778c19bc037759aea298da4b56621f4474ffeb117", - "sha256:2fdef0d83a2d08d69b1f2210a93c416d54e14d9eb398f6ab2f0a209433db19e1", - "sha256:3c65d37f3a9ebb703e710befdc489a38683a5b152242664b973a7b7b22348a4e", - "sha256:4f704f0998911abf728a7783799444fcbbe8261c4a6c166f667937ae6a8aa522", - "sha256:51b44306032045b383a7a8a2c13878de375117946d68dcb54308111f39775a25", - "sha256:53d202fd109416ce011578f321460795abfe10bb901b883cafd9b3ef851bacfc", - "sha256:58809e238a8a12a625c70450b48e8767cff9eb67c62e6154a642b21ddf79baea", - "sha256:5915fcdec0e54ee229926868e9b08586376cae1f5faa9bbaf8faf3561b393d52", - "sha256:5beb1ee382ad32afe424097de57134175fea3faf847b9af002cc7895be4e2a5a", - "sha256:5f8ae553cba74085db385d489c7a792ad66f7f9ba2ee85bfa508aeb84cf0ba07", - "sha256:5fbd612f8a091954a0c8dd4c0b571b973487277d26476f8480bfa4b2a65b5d06", - "sha256:6bd818b7ea14bc6e1f06e241e8234508b21edf1b242d49831831a9450e2f35fa", - "sha256:6f01ba56b1c0e9d149f9ac85a2f999724895229eb36bd997b61e62999e9b0901", - "sha256:73d2b73584446e66ee633eaad1a56aad577c077f46c35ca3283cd687b7715b0b", - "sha256:7bb92c539a624cf86296dd0c68cd5cc286c9eef2d0c3b8b192b604ce9de20a17", - "sha256:8165b796df0bd42e10527a3f493c592ba494f16ef3c8b531288e3d0d72c1f6f0", - "sha256:862264b12ebb65ad8d863d51f17758b1684560b66ab02770d4f0baf2ff75da21", - "sha256:8902dd6a30173d4ef09954bfcb24b5d7b5190cf14a43170e386979651e09ba19", - "sha256:8cf717ee42012be8c0cb205dbbf18ffa9003c4cbf4ad078db47b95e10748eec5", - "sha256:8ed9281d1b52628e81393f5eaee24a45cbd64965f41857559c2b7ff19385df51", - "sha256:99b41d18e6b2a48ba949418db48159d7a2e81c5cc290fc934b7d2380515bd0e3", - "sha256:9cb7fa111d21a6b55cbf633039f7bc2749e74932e3aa7cb7333f675a58a58bf3", - "sha256:a181e99301a0ae128493a24cfe5cfb5b488c4e0bf2f8702091473d033494d04f", - "sha256:a413a096c4cbac202433c850ee43fa326d2e871b24554da8327b01632673a076", - "sha256:a6b1e54712ba3474f34b7ef7a41e65bd9037ad47916ccb1cc78769bae324c01a", - "sha256:ade3ca1e5f0ff46b678b66201f7ff477e8fa11fb537f3b55c3f0568fbfe6e718", - "sha256:b0ac3d42cb51c4b12df9c5f0dd2f13a4f24f01943627120ec4d293c9181219ba", - "sha256:b369ead6527d025a0fe7bd3864e46dbee3aa8f652d48df6174f8d0bac9e26e0e", - "sha256:b57b768feb866f44eeed9f46975f3d6406380275c5ddfe22f531a2bf187eda27", - "sha256:b8d3a03d9bfcaf5b0141d07a88456bb6a4c3ce55c080712fec8418ef3610230e", - "sha256:bc66f0bf1d7730a17430a50163bb264ba9ded56739112368ba985ddaa9c3bd09", - "sha256:bf20494da9653f6410213424f5f8ad0ed885e01f7e8e59811f572bdb20b8972e", - "sha256:c48167910a8f644671de9f2083a23630fbf7a1cb70ce939440cd3328e0919f70", - "sha256:c481b47f6b5845064c65a7bc78bc0860e635a9b055af0df46fdf1c58cebf8e8f", - "sha256:c7c8b95bf47db6d19096a5e052ffca0a05f335bc63cef281a6e8fe864d450a72", - "sha256:c9b8e184898ed014884ca84c70562b4a82cbc63b044d366fedc68bc2b2f3394a", - "sha256:cc8ff50b50ce532de2fa7a7daae9dd12f0a699bfcd47f20945364e5c31799fef", - "sha256:d541423cdd416b78626b55f123412fcf979d22a2c39fce251b350de38c15c15b", - "sha256:dab4d16dfef34b185032580e2f2f89253d302facba093d5fa9dbe04f569c4f4b", - "sha256:dacbc52de979f2823a819571f2e3a350a7e36b8cb7484cdb1e289bceaf35305f", - "sha256:df57bdbeffe694e7842092c5e2e0bc80fff7f43379d465f932ef36f027179806", - "sha256:ed8fe9189d2beb6edc14d3ad19800626e1d9f2d975e436f84e19efb7fa19469b", - "sha256:f3ddf056d3ebcf6ce47bdaf56142af51bb7fad09e4af310241e9db7a3a8022e1", - "sha256:f8fe4984b431f8621ca53d9380901f62bfb54ff759a1348cd140490ada7b693c", - "sha256:fe439416eb6380de434886b00c859304338f8b19f6f54811984f3420a2e03858" + "sha256:093896e530c38c8e9c996901858ac63f3d4171268db2c9c8b373a228f459bbc5", + "sha256:09b9f848b28081e7b975a3626e9081574a7b9196cde26604540582da60235fdf", + "sha256:0b0c69f4f724c64dfbfe79f5dfb503b42fe6127b8d479b2677f2b227478db2eb", + "sha256:13618bed0c38acc418896005732e565b317aa9e98d855a0e9f211a7ffc2d6638", + "sha256:13690e923a3932e4fad4c0ebfb9cb5988e03d9dcb4c5150b5fcbf58fd8bddfc4", + "sha256:177f01eeaa3aee4a5ffb0d1439c5952b53d5010f86e9d2667963e632e30082cc", + "sha256:193e3bffca48ad74b8c764fb4492dd875038a2f9925530cb094db92bb5e47bed", + "sha256:1defe91d41ce1bd44b40fabf071e6a01a5aa14de4a31b986aa9dfd1b3e3e414a", + "sha256:1f188a2402f8359cf0c4b1fe89eea40dc13b52e7b4fd4812450da9fcd210181d", + "sha256:202a2d645c5a46b84992f55b0a3affe4f0ba6b4c611abec32ee88358db4bb649", + "sha256:24eda3a24a38157eee639ca9afe45eefa8d2420d49468819ac5f88b10de84f4c", + "sha256:2e4e0f60cb4bd7396108823548e82fdab72d4d8a65e58e2c19bbbc2f1e2bfa4b", + "sha256:379c111d3558272a2cae3d8e57e6b6e6f4fe652905692d54bad5ea0ca37c5ad4", + "sha256:37cda8712145917105e07aab96388ae76e787270ec04bcb9d5cc786d7cbb8443", + "sha256:38c51297b35b3ed91670e1e4efb702b790002e3245a28c76e627478aa3c10d83", + "sha256:3985b9be361d8fb6b2d1adc9924d01dec575a1d7453a14cccd73225cb79243ee", + "sha256:3988665ee376abce49613701336544041f2117de7b7fbfe91b93d8ff8b151c8e", + "sha256:3ac47fa29d8d41059ea3df65bd3ade92f97ee4910ed638e87075b8e8ce69599e", + "sha256:3b4b4299dd0d2c67caaaf286d58aef5e75b125b95615dda4542561a5a566a1e3", + "sha256:3ea8bb1ab9558374c0ab591783808511d135a833c3ca64a18ec927f20c4030f0", + "sha256:3fe47da3e4fda5f1abb5709c156eca207eacf8007304ce3019eb001e7a7204cb", + "sha256:428ac484592f780e8cd7b6b14eb568f7c85460c92e2a37cb0c0e5186e1a0d076", + "sha256:44e6c85bbdc809383b509d732b06419fb4544dca29ebe18480379633623baafb", + "sha256:4674f0daa1823c295845b6a740d98a840d7a1c11df00d1fd62614545c1583787", + "sha256:4be32da0c3827ac9132bb488d331cb32e8d9638dd41a0557c5569d57cf22c9c1", + "sha256:4db3ed6a907b555e57cc2e6f14dc3a4c2458cdad8919e40b5357ab9b6db6c43e", + "sha256:5c52a036535d12590c32c49209e79cabaad9f9ad8aa4cbd875b68c4d67a9cbce", + "sha256:629a1ba2115dce8bf75a5cce9f2486ae483cb89c0145795603d6554bdc83e801", + "sha256:62a66ff235e4c2e37ed3b6104d8b478d767ff73838d1222132a7a026aa548764", + "sha256:63068a11171e4276f6ece913bde059e77c713b48c3a848814a6537f35afb8365", + "sha256:63c19702db10ad79151a059d2d6336fe0c470f2e18d0d4d1a57f7f9713875dcf", + "sha256:644ec81edec0f4ad17d51c838a7d01e42811054543b76d4ba2c5d6af741ce2a6", + "sha256:6535d996f6537ecb298b4e287a855f37deaf64ff007162ec0afb9ab8ba3b8b71", + "sha256:6f4548c5ead23ad13fb7a2c8ea541357474ec13c2b736feb02e19a3085fac002", + "sha256:716a78a342679cd1177bc8c2fe957e0ab91405bd43a17094324845200b2fddf4", + "sha256:74610105ebd6f33d7c10f8907afed696e79c59e3043c5f20eaa3a46fddf33b4c", + "sha256:768939f7c4353c0fac2f7c37897e10b1414b571fd85dd9fc49e6a87e37a2e0d8", + "sha256:86cffe9c6dfcfe22e28027069725c7f57f4b868a3f86e81d1c62462764dc46d4", + "sha256:8aae5aea53cbfe024919715eca696b1a3201886ce83790537d1c3668459c7146", + "sha256:8b2b8503edb06822c86d82fa64a4a5cb0760bb8f31f26e138ec743f422f37cfc", + "sha256:912e95017ff51dc3d7b6e2be158dedc889d9a5cc3382445589ce554f1a34c0ea", + "sha256:9a7b8ac36fd688c8361cbc7bf1cb5866977ece6e0b17c34aa0df58bda4fa18a4", + "sha256:9e89d5c8509fbd6c03d0dd1972925b22f50db0792ce06324ba069f10787429ad", + "sha256:ae270e79f7e169ccfe23284ff5ea2d52a6f401dc01b337efb54b3783e2ce3f28", + "sha256:b07c25d52b1c16ce5de088046cd2432b30f9ad5e224ff17c8f496d9cb7d1d451", + "sha256:b39e6011cd06822eb964d038d5dff5da5d98652b81f5ecd439277b32361a3a50", + "sha256:bd55f8fc8fa494958772a2a7302b0354ab16e0b9272b3c3d83cdb5bec5bd1779", + "sha256:c15b32a7aca8038ed7644f854bf17b663bc38e1671b5d6f43f9a2b2bd0c46f63", + "sha256:c1b4474beee02ede1eef86c25ad4600a424fe36cff01a6103cb4533c6bf0169e", + "sha256:c79c0685f142ca53256722a384540832420dff4ab15fec1863d7e5bc8691bdcc", + "sha256:c9ebfb2507751f7196995142f057d1324afdab56db1d9743aab7f50289abd022", + "sha256:d7ad66e8e50225ebf4236368cc43c37f59d5e6728f15f6e258c8639fa0dd8e6d", + "sha256:d82ab6816c3277dc962cfcdc85b1efa0e5f50fb2c449432deaf2398a2928ab94", + "sha256:d9fd2547e6decdbf985d579cf3fc78e4c1d662b9b0ff7cc7862baaab71c9cc5b", + "sha256:de38add67a0af869b0d79c525d3e4588ac1ffa92f39116dbe0ed9753f26eba7d", + "sha256:e19122296822deafce89a0c5e8685704c067ae65d45e79718c92df7b3ec3d331", + "sha256:e44961e36cb13c495806d4cac67640ac2866cb99044e210895b506c26ee63d3a", + "sha256:e4c81ed2820b9023a9a90717020315e63b17b18c274a332e3b6437d7ff70abe0", + "sha256:e683e6ecc587643f8cde8f5da6768e9d165cd31edf39ee90ed7034f9ca0eefee", + "sha256:f39e2f3530ed1626c66e7493be7a8423b023ca852aacdc91fb30162c350d2a92", + "sha256:f56f49b2553d7dd85fd86e029515a221e5c1f8cb3d9c38b470bc38bde7b8445a", + "sha256:fb9fc32399dca861584d96eccd6c980b69bbcd7c228d06fb74fe53e007aa8ef9" ], "index": "pypi", "markers": "python_version >= '3.9'", - "version": "==7.6.4" + "version": "==7.6.8" }, "iniconfig": { "hashes": [ @@ -1329,11 +1320,11 @@ }, "packaging": { "hashes": [ - "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", - "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124" + "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", + "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f" ], "markers": "python_version >= '3.8'", - "version": "==24.1" + "version": "==24.2" }, "pluggy": { "hashes": [ diff --git a/dbrepo-search-service/init/lib/dbrepo-1.5.2.tar.gz b/dbrepo-search-service/init/lib/dbrepo-1.5.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7ae42798985882bb5103892cb62a50e3ef9ae9da GIT binary patch literal 39335 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 RbMO6Uf9SuvIzt630{~#~jwAp8 literal 0 HcmV?d00001 diff --git a/dbrepo-search-service/lib/dbrepo-1.5.2.tar.gz b/dbrepo-search-service/lib/dbrepo-1.5.2.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7ae42798985882bb5103892cb62a50e3ef9ae9da GIT binary patch literal 39335 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 RbMO6Uf9SuvIzt630{~#~jwAp8 literal 0 HcmV?d00001 diff --git a/dbrepo-ui/composables/upload-service.ts b/dbrepo-ui/composables/upload-service.ts index 2697131610..f7a6964d58 100644 --- a/dbrepo-ui/composables/upload-service.ts +++ b/dbrepo-ui/composables/upload-service.ts @@ -1,9 +1,11 @@ import * as tus from 'tus-js-client' import {useCacheStore} from '@/stores/cache' +import {useUserStore} from '@/stores/user' export const useUploadService = (): any => { function create (data: File) { + const userStore = useUserStore() const config = useRuntimeConfig() const endpoint = config.public.upload.client return new Promise<string>((resolve, reject) => { @@ -13,6 +15,9 @@ export const useUploadService = (): any => { } const uploadClient: tus.Upload = new tus.Upload(data, { endpoint, + headers: { + 'Authorization': `Bearer ${userStore.getToken}` + }, retryDelays: [0, 3000, 5000, 10000, 20000], onError (error) { console.error('Failed to upload:', error) diff --git a/dbrepo-upload-service/.gitignore b/dbrepo-upload-service/.gitignore new file mode 100644 index 0000000000..a5aee567d4 --- /dev/null +++ b/dbrepo-upload-service/.gitignore @@ -0,0 +1,2 @@ +# environment +venv/ \ No newline at end of file diff --git a/dbrepo-upload-service/mvnw b/dbrepo-upload-service/mvnw new file mode 100755 index 0000000000..a16b5431b4 --- /dev/null +++ b/dbrepo-upload-service/mvnw @@ -0,0 +1,310 @@ +#!/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 +# +# https://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. +# ---------------------------------------------------------------------------- + +# ---------------------------------------------------------------------------- +# Maven Start Up Batch script +# +# Required ENV vars: +# ------------------ +# JAVA_HOME - location of a JDK home dir +# +# Optional ENV vars +# ----------------- +# M2_HOME - location of maven2's installed home dir +# MAVEN_OPTS - parameters passed to the Java VM when running Maven +# e.g. to debug Maven itself, use +# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +# MAVEN_SKIP_RC - flag to disable loading of mavenrc files +# ---------------------------------------------------------------------------- + +if [ -z "$MAVEN_SKIP_RC" ] ; then + + if [ -f /etc/mavenrc ] ; then + . /etc/mavenrc + fi + + if [ -f "$HOME/.mavenrc" ] ; then + . "$HOME/.mavenrc" + fi + +fi + +# OS specific support. $var _must_ be set to either true or false. +cygwin=false; +darwin=false; +mingw=false +case "`uname`" in + CYGWIN*) cygwin=true ;; + MINGW*) mingw=true;; + Darwin*) darwin=true + # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home + # See https://developer.apple.com/library/mac/qa/qa1170/_index.html + if [ -z "$JAVA_HOME" ]; then + if [ -x "/usr/libexec/java_home" ]; then + export JAVA_HOME="`/usr/libexec/java_home`" + else + export JAVA_HOME="/Library/Java/Home" + fi + fi + ;; +esac + +if [ -z "$JAVA_HOME" ] ; then + if [ -r /etc/gentoo-release ] ; then + JAVA_HOME=`java-config --jre-home` + fi +fi + +if [ -z "$M2_HOME" ] ; then + ## resolve links - $0 may be a link to maven's home + PRG="$0" + + # need this for relative symlinks + while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG="`dirname "$PRG"`/$link" + fi + done + + saveddir=`pwd` + + M2_HOME=`dirname "$PRG"`/.. + + # make it fully qualified + M2_HOME=`cd "$M2_HOME" && pwd` + + cd "$saveddir" + # echo Using m2 at $M2_HOME +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched +if $cygwin ; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --unix "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --unix "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --unix "$CLASSPATH"` +fi + +# For Mingw, ensure paths are in UNIX format before anything is touched +if $mingw ; then + [ -n "$M2_HOME" ] && + M2_HOME="`(cd "$M2_HOME"; pwd)`" + [ -n "$JAVA_HOME" ] && + JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`" +fi + +if [ -z "$JAVA_HOME" ]; then + javaExecutable="`which javac`" + if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then + if $darwin ; then + javaHome="`dirname \"$javaExecutable\"`" + javaExecutable="`cd \"$javaHome\" && pwd -P`/javac" + else + javaExecutable="`readlink -f \"$javaExecutable\"`" + fi + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + JAVA_HOME="$javaHome" + export JAVA_HOME + fi + fi +fi + +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="`which java`" + fi +fi + +if [ ! -x "$JAVACMD" ] ; then + echo "Error: JAVA_HOME is not defined correctly." >&2 + echo " We cannot execute $JAVACMD" >&2 + exit 1 +fi + +if [ -z "$JAVA_HOME" ] ; then + echo "Warning: JAVA_HOME environment variable is not set." +fi + +CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher + +# traverses directory structure from process work directory to filesystem root +# first directory with .mvn subdirectory is considered project base directory +find_maven_basedir() { + + if [ -z "$1" ] + then + echo "Path not specified to find_maven_basedir" + return 1 + fi + + basedir="$1" + wdir="$1" + while [ "$wdir" != '/' ] ; do + if [ -d "$wdir"/.mvn ] ; then + basedir=$wdir + break + fi + # workaround for JBEAP-8937 (on Solaris 10/Sparc) + if [ -d "${wdir}" ]; then + wdir=`cd "$wdir/.."; pwd` + fi + # end of workaround + done + echo "${basedir}" +} + +# concatenates all lines of a file +concat_lines() { + if [ -f "$1" ]; then + echo "$(tr -s '\n' ' ' < "$1")" + fi +} + +BASE_DIR=`find_maven_basedir "$(pwd)"` +if [ -z "$BASE_DIR" ]; then + exit 1; +fi + +########################################################################################## +# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +# This allows using the maven wrapper in projects that prohibit checking in binary data. +########################################################################################## +if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found .mvn/wrapper/maven-wrapper.jar" + fi +else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..." + fi + if [ -n "$MVNW_REPOURL" ]; then + jarUrl="$MVNW_REPOURL/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + else + jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + fi + while IFS="=" read key value; do + case "$key" in (wrapperUrl) jarUrl="$value"; break ;; + esac + done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties" + if [ "$MVNW_VERBOSE" = true ]; then + echo "Downloading from: $jarUrl" + fi + wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" + if $cygwin; then + wrapperJarPath=`cygpath --path --windows "$wrapperJarPath"` + fi + + if command -v wget > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found wget ... using wget" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + wget "$jarUrl" -O "$wrapperJarPath" + else + wget --http-user=$MVNW_USERNAME --http-password=$MVNW_PASSWORD "$jarUrl" -O "$wrapperJarPath" + fi + elif command -v curl > /dev/null; then + if [ "$MVNW_VERBOSE" = true ]; then + echo "Found curl ... using curl" + fi + if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then + curl -o "$wrapperJarPath" "$jarUrl" -f + else + curl --user $MVNW_USERNAME:$MVNW_PASSWORD -o "$wrapperJarPath" "$jarUrl" -f + fi + + else + if [ "$MVNW_VERBOSE" = true ]; then + echo "Falling back to using Java to download" + fi + javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java" + # For Cygwin, switch paths to Windows format before running javac + if $cygwin; then + javaClass=`cygpath --path --windows "$javaClass"` + fi + if [ -e "$javaClass" ]; then + if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Compiling MavenWrapperDownloader.java ..." + fi + # Compiling the Java class + ("$JAVA_HOME/bin/javac" "$javaClass") + fi + if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then + # Running the downloader + if [ "$MVNW_VERBOSE" = true ]; then + echo " - Running MavenWrapperDownloader.java ..." + fi + ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR") + fi + fi + fi +fi +########################################################################################## +# End of extension +########################################################################################## + +export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"} +if [ "$MVNW_VERBOSE" = true ]; then + echo $MAVEN_PROJECTBASEDIR +fi +MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS" + +# For Cygwin, switch paths to Windows format before running java +if $cygwin; then + [ -n "$M2_HOME" ] && + M2_HOME=`cygpath --path --windows "$M2_HOME"` + [ -n "$JAVA_HOME" ] && + JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"` + [ -n "$CLASSPATH" ] && + CLASSPATH=`cygpath --path --windows "$CLASSPATH"` + [ -n "$MAVEN_PROJECTBASEDIR" ] && + MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"` +fi + +# Provide a "standardized" way to retrieve the CLI args that will +# work with both Windows and non-Windows executions. +MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $@" +export MAVEN_CMD_LINE_ARGS + +WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +exec "$JAVACMD" \ + $MAVEN_OPTS \ + -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \ + "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \ + ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@" diff --git a/dbrepo-upload-service/mvnw.cmd b/dbrepo-upload-service/mvnw.cmd new file mode 100644 index 0000000000..c8d43372c9 --- /dev/null +++ b/dbrepo-upload-service/mvnw.cmd @@ -0,0 +1,182 @@ +@REM ---------------------------------------------------------------------------- +@REM Licensed to the Apache Software Foundation (ASF) under one +@REM or more contributor license agreements. See the NOTICE file +@REM distributed with this work for additional information +@REM regarding copyright ownership. The ASF licenses this file +@REM to you under the Apache License, Version 2.0 (the +@REM "License"); you may not use this file except in compliance +@REM with the License. You may obtain a copy of the License at +@REM +@REM https://www.apache.org/licenses/LICENSE-2.0 +@REM +@REM Unless required by applicable law or agreed to in writing, +@REM software distributed under the License is distributed on an +@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +@REM KIND, either express or implied. See the License for the +@REM specific language governing permissions and limitations +@REM under the License. +@REM ---------------------------------------------------------------------------- + +@REM ---------------------------------------------------------------------------- +@REM Maven Start Up Batch script +@REM +@REM Required ENV vars: +@REM JAVA_HOME - location of a JDK home dir +@REM +@REM Optional ENV vars +@REM M2_HOME - location of maven2's installed home dir +@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands +@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending +@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven +@REM e.g. to debug Maven itself, use +@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 +@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files +@REM ---------------------------------------------------------------------------- + +@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on' +@echo off +@REM set title of command window +title %0 +@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on' +@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO% + +@REM set %HOME% to equivalent of $HOME +if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%") + +@REM Execute a user defined script before this one +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre +@REM check for pre script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat" +if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd" +:skipRcPre + +@setlocal + +set ERROR_CODE=0 + +@REM To isolate internal variables from possible post scripts, we use another setlocal +@setlocal + +@REM ==== START VALIDATION ==== +if not "%JAVA_HOME%" == "" goto OkJHome + +echo. +echo Error: JAVA_HOME not found in your environment. >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +:OkJHome +if exist "%JAVA_HOME%\bin\java.exe" goto init + +echo. +echo Error: JAVA_HOME is set to an invalid directory. >&2 +echo JAVA_HOME = "%JAVA_HOME%" >&2 +echo Please set the JAVA_HOME variable in your environment to match the >&2 +echo location of your Java installation. >&2 +echo. +goto error + +@REM ==== END VALIDATION ==== + +:init + +@REM Find the project base dir, i.e. the directory that contains the folder ".mvn". +@REM Fallback to current working directory if not found. + +set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR% +IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir + +set EXEC_DIR=%CD% +set WDIR=%EXEC_DIR% +:findBaseDir +IF EXIST "%WDIR%"\.mvn goto baseDirFound +cd .. +IF "%WDIR%"=="%CD%" goto baseDirNotFound +set WDIR=%CD% +goto findBaseDir + +:baseDirFound +set MAVEN_PROJECTBASEDIR=%WDIR% +cd "%EXEC_DIR%" +goto endDetectBaseDir + +:baseDirNotFound +set MAVEN_PROJECTBASEDIR=%EXEC_DIR% +cd "%EXEC_DIR%" + +:endDetectBaseDir + +IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig + +@setlocal EnableExtensions EnableDelayedExpansion +for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a +@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS% + +:endReadAdditionalConfig + +SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe" +set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar" +set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain + +set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + +FOR /F "tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO ( + IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B +) + +@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central +@REM This allows using the maven wrapper in projects that prohibit checking in binary data. +if exist %WRAPPER_JAR% ( + if "%MVNW_VERBOSE%" == "true" ( + echo Found %WRAPPER_JAR% + ) +) else ( + if not "%MVNW_REPOURL%" == "" ( + SET DOWNLOAD_URL="%MVNW_REPOURL%/io/takari/maven-wrapper/0.5.6/maven-wrapper-0.5.6.jar" + ) + if "%MVNW_VERBOSE%" == "true" ( + echo Couldn't find %WRAPPER_JAR%, downloading it ... + echo Downloading from: %DOWNLOAD_URL% + ) + + powershell -Command "&{"^ + "$webclient = new-object System.Net.WebClient;"^ + "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^ + "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^ + "}"^ + "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"^ + "}" + if "%MVNW_VERBOSE%" == "true" ( + echo Finished downloading %WRAPPER_JAR% + ) +) +@REM End of extension + +@REM Provide a "standardized" way to retrieve the CLI args that will +@REM work with both Windows and non-Windows executions. +set MAVEN_CMD_LINE_ARGS=%* + +%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %* +if ERRORLEVEL 1 goto error +goto end + +:error +set ERROR_CODE=1 + +:end +@endlocal & set ERROR_CODE=%ERROR_CODE% + +if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost +@REM check for post script, once with legacy .bat ending and once with .cmd ending +if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat" +if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd" +:skipRcPost + +@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on' +if "%MAVEN_BATCH_PAUSE%" == "on" pause + +if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE% + +exit /B %ERROR_CODE% diff --git a/dbrepo-upload-service/pom.xml b/dbrepo-upload-service/pom.xml new file mode 100644 index 0000000000..9684d60454 --- /dev/null +++ b/dbrepo-upload-service/pom.xml @@ -0,0 +1,168 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-parent</artifactId> + <version>3.1.12</version> + </parent> + + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-upload-service</artifactId> + <name>dbrepo-upload-service</name> + <version>1.5.2</version> + + <url>https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/</url> + <developers> + <developer> + <name>Martin Weise</name> + <email>martin.weise@tuwien.ac.at</email> + <organization>TU Wien</organization> + </developer> + </developers> + + <properties> + <java.version>17</java.version> + <spring-cloud.version>4.0.2</spring-cloud.version> + <mapstruct.version>1.5.5.Final</mapstruct.version> + <rabbitmq.version>5.20.0</rabbitmq.version> + <jackson-datatype.version>2.15.0</jackson-datatype.version> + <commons-io.version>2.15.0</commons-io.version> + <commons-validator.version>1.8.0</commons-validator.version> + <guava.version>33.0.0-jre</guava.version> + <jacoco.version>0.8.12</jacoco.version> + <jwt.version>4.3.0</jwt.version> + <c3p0.version>0.9.5.5</c3p0.version> + <c3p0-hibernate.version>6.2.2.Final</c3p0-hibernate.version> + <apache-jena.version>4.10.0</apache-jena.version> + <opencsv.version>5.7.1</opencsv.version> + <super-csv.version>2.4.0</super-csv.version> + <keycloak.version>21.0.2</keycloak.version> + <springdoc-openapi.version>2.3.0</springdoc-openapi.version> + <testcontainers.version>1.19.1</testcontainers.version> + <keycloak-testcontainer.version>3.2.0</keycloak-testcontainer.version> + <aws-s3.version>2.25.23</aws-s3.version> + <jackson.version>2.15.2</jackson.version> + <minio.version>8.5.7</minio.version> + </properties> + + <dependencies> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-api</artifactId> + <version>${version}</version> + </dependency> + <dependency> + <groupId>at.tuwien</groupId> + <artifactId>dbrepo-metadata-service-repositories</artifactId> + <version>${version}</version> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-validation</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-web</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-security</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.security</groupId> + <artifactId>spring-security-test</artifactId> + <scope>test</scope> + </dependency> + <!-- IDE --> + <dependency> + <groupId>org.projectlombok</groupId> + <artifactId>lombok</artifactId> + <scope>compile</scope> + </dependency> + <!-- Mapping --> + <dependency> + <groupId>org.mapstruct</groupId> + <artifactId>mapstruct-processor</artifactId> + <version>${mapstruct.version}</version> + <optional>true</optional> + </dependency> + <dependency> + <groupId>org.mapstruct</groupId> + <artifactId>mapstruct</artifactId> + <version>${mapstruct.version}</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-jsr310</artifactId> + <version>${jackson-datatype.version}</version> + </dependency> + <dependency> + <groupId>commons-io</groupId> + <artifactId>commons-io</artifactId> + <version>${commons-io.version}</version> + </dependency> + <dependency> + <groupId>commons-validator</groupId> + <artifactId>commons-validator</artifactId> + <version>${commons-validator.version}</version> + </dependency> + <dependency> + <groupId>com.fasterxml.jackson.datatype</groupId> + <artifactId>jackson-datatype-hibernate6</artifactId> + <version>${jackson-datatype.version}</version> + </dependency> + <!-- Authentication --> + <dependency> + <groupId>org.keycloak</groupId> + <artifactId>keycloak-common</artifactId> + <version>${keycloak.version}</version> + </dependency> + <!-- Testing --> + <dependency> + <groupId>org.springframework</groupId> + <artifactId>spring-test</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.boot</groupId> + <artifactId>spring-boot-starter-test</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>com.h2database</groupId> + <artifactId>h2</artifactId> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>junit-jupiter</artifactId> + <version>${testcontainers.version}</version> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.testcontainers</groupId> + <artifactId>minio</artifactId> + <version>${testcontainers.version}</version> + </dependency> + <dependency> + <groupId>com.github.dasniko</groupId> + <artifactId>testcontainers-keycloak</artifactId> + <version>${keycloak-testcontainer.version}</version> + <scope>test</scope> + </dependency> + </dependencies> + + <build> + <resources> + <resource> + <directory>${basedir}/src/main/resources</directory> + <filtering>true</filtering> + <includes> + <include>**/application*.yml</include> + <include>**/init/dbrepo-realm.json</include> + </includes> + </resource> + </resources> + </build> + +</project> diff --git a/dbrepo-upload-service/pre-create.sh b/dbrepo-upload-service/pre-create.sh new file mode 100755 index 0000000000..b166023fb5 --- /dev/null +++ b/dbrepo-upload-service/pre-create.sh @@ -0,0 +1,45 @@ +#!/bin/bash +REQUEST_RAW=$(cat /dev/stdin) +AUTH_SERVICE_ENDPOINT="${AUTH_SERVICE_ENDPOINT:-http://data-service:8080}" + +echo "[DEBUG] [pre-create hook] request started" >&2 +if [ "$(echo "$REQUEST_RAW" | jq '.Event.HTTPRequest.Header | has("Authorization")')" == "false" ]; then + echo "[ERROR] [pre-create hook] Missing header 'Authorization'" >&2 + echo "[DEBUG] [pre-create hook] raw request: ${REQUEST_RAW}" >&2 + cat <<END + { + "RejectUpload": true, + "HTTPResponse": { + "StatusCode": 400, + "Header": { + "Content-Type": "application/json" + }, + "Body": "{\"code\":\"error.upload.malformed\",\"message\":\"Missing header 'Authorization'\",\"status\":\"BAD_REQUEST\"}" + } + } +END + exit 0 +fi + +echo "[DEBUG] [pre-create hook] request has 'Authorization' header present" >&2 + +BEARER="$(echo "$REQUEST_RAW" | jq -r '.Event.HTTPRequest.Header.Authorization[0]')" +echo "[DEBUG] [pre-create hook] attempting to contact ${AUTH_SERVICE_ENDPOINT}" >&2 +if [ ! "$(wget -O- --quiet --header "Authorization: ${BEARER}" ${AUTH_SERVICE_ENDPOINT}/realms/dbrepo/protocol/openid-connect/userinfo)" ]; then + echo "[ERROR] [pre-create hook] Unauthorized" >&2 + cat <<END + { + "RejectUpload": true, + "HTTPResponse": { + "StatusCode": 401, + "Header": { + "Content-Type": "application/json" + }, + "Body": "{\"code\":\"error.upload.unauthorized\",\"message\":\"Authentication required\",\"status\":\"UNAUTHORIZED\"}" + } + } +END + exit 0 +fi + +echo "[INFO] [pre-create hook] Authorized" >&2 \ No newline at end of file diff --git a/dbrepo-upload-service/src/main/java/at/tuwien/Application.java b/dbrepo-upload-service/src/main/java/at/tuwien/Application.java new file mode 100644 index 0000000000..08ff7e84e7 --- /dev/null +++ b/dbrepo-upload-service/src/main/java/at/tuwien/Application.java @@ -0,0 +1,13 @@ +package at.tuwien; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/dbrepo-upload-service/src/main/resources/application-local.yml b/dbrepo-upload-service/src/main/resources/application-local.yml new file mode 100644 index 0000000000..34573c21f4 --- /dev/null +++ b/dbrepo-upload-service/src/main/resources/application-local.yml @@ -0,0 +1,82 @@ +spring: + datasource: + url: jdbc:h2:mem:fda;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS FDA;NON_KEYWORDS=value + driver-class-name: org.h2.Driver + username: sa + password: password + jpa: + show-sql: false + open-in-view: false + properties: + hibernate: + default_schema: dbrepo + jdbc: + time_zone: UTC + format_sql: false + application: + name: metadata-service + rabbitmq: + host: localhost + virtual-host: dbrepo + username: admin + password: admin + port: 5672 +management: + endpoints: + web: + exposure: + include: health,info,prometheus + endpoint: + health: + probes: + enabled: true + health: + readinessState: + enabled: true + livenessState: + enabled: true +server: + port: 19099 +logging: + pattern.console: "%d %highlight(%-5level) %msg%n" + level: + root: warn + at.tuwien.: trace + org.springframework.security.web.FilterChainProxy: debug +# org.hibernate.resource.jdbc: trace + org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug +dbrepo: + repository-name: Database Repository + base-url: http://localhost + admin-email: noreply@example.com + deleted-record: persistent + granularity: YYYY-MM-DDThh:mm:ssZ + exchangeName: dbrepo + queueName: dbrepo + connectionTimeout: 10000 + s3: + accessKeyId: seaweedfsadmin + secretAccessKey: seaweedfsadmin + bucket: dbrepo + system: + username: admin + password: admin + endpoints: + searchService: http://localhost + analyseService: http://localhost + dataService: http://localhost:9093 + brokerService: http://localhost:15672 + authService: http://localhost/api/auth + storageService: http://localhost/api/storage + rorService: https://api.ror.org + crossRefService: http://data.crossref.org + pid: + base: http://localhost/pid/ + jwt: + public_key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB + keycloak: + username: admin + password: admin + client: dbrepo-client + clientSecret: MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG + website: http://localhost diff --git a/dbrepo-upload-service/src/main/resources/application.yml b/dbrepo-upload-service/src/main/resources/application.yml new file mode 100644 index 0000000000..2d79e7cfae --- /dev/null +++ b/dbrepo-upload-service/src/main/resources/application.yml @@ -0,0 +1,84 @@ +application: + title: DBRepo + version: '@project.version@' +spring: + datasource: + url: "jdbc:mariadb://${METADATA_HOST:metadata-db}:${METADATA_PORT:3306}/${METADATA_DB:dbrepo}${METADATA_JDBC_EXTRA_ARGS}" + driver-class-name: org.mariadb.jdbc.Driver + username: "${METADATA_USERNAME:root}" + password: "${METADATA_DB_PASSWORD:dbrepo}" + jpa: + show-sql: false + open-in-view: false + properties: + hibernate: + default_schema: "${METADATA_DB:dbrepo}" + jdbc: + time_zone: UTC + application: + name: metadata-service + rabbitmq: + host: "${BROKER_HOST:broker-service}" + virtual-host: "${BROKER_VIRTUALHOST:dbrepo}" + username: "${BROKER_USERNAME:admin}" + password: "${BROKER_PASSWORD:admin}" + port: ${BROKER_PORT:5672} + main: + banner-mode: off +management: + endpoints: + web: + exposure: + include: health,info,prometheus + endpoint: + health: + probes: + enabled: true + health: + readinessState: + enabled: true + livenessState: + enabled: true +server: + port: 8080 +logging: + pattern.console: "%d %highlight(%-5level) %msg%n" + level: + root: warn + at.tuwien.: "${LOG_LEVEL:info}" + org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver: debug +dbrepo: + repository-name: "${REPOSITORY_NAME:Database Repository}" + base-url: "${BASE_URL:http://localhost}" + admin-email: "${ADMIN_EMAIL:noreply@example.com}" + deleted-record: "${DELETED_RECORD:persistent}" + granularity: "${GRANULARITY:YYYY-MM-DDThh:mm:ssZ}" + exchangeName: "${BROKER_EXCHANGE_NAME:dbrepo}" + queueName: "${BROKER_QUEUE_NAME:dbrepo}" + connectionTimeout: "${SPARQL_CONNECTION_TIMEOUT:10000}" + s3: + accessKeyId: "${S3_ACCESS_KEY_ID:seaweedfsadmin}" + secretAccessKey: "${S3_SECRET_ACCESS_KEY:seaweedfsadmin}" + bucket: "${S3_BUCKET:dbrepo}" + system: + username: "${SYSTEM_USERNAME:admin}" + password: "${SYSTEM_PASSWORD:admin}" + endpoints: + analyseService: "${ANALYSE_SERVICE_ENDPOINT:http://analyse-service:8080}" + searchService: "${SEARCH_SERVICE_ENDPOINT:http://search-service:8080}" + dataService: "${DATA_SERVICE_ENDPOINT:http://data-service:8080}" + brokerService: "${BROKER_SERVICE_ENDPOINT:http://broker-service:15672}" + authService: "${AUTH_SERVICE_ENDPOINT:http://auth-service:8080}" + storageService: "${S3_ENDPOINT:http://storage-service:9000}" + rorService: "${ROR_ENDPOINT:https://api.ror.org}" + crossRefService: "${CROSSREF_ENDPOINT:http://data.crossref.org}" + pid: + base: "${BASE_URL:http://localhost}/pid/" + jwt: + public_key: "${JWT_PUBKEY:MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQAB}" + keycloak: + username: "${AUTH_SERVICE_ADMIN:admin}" + password: "${AUTH_SERVICE_ADMIN_PASSWORD:admin}" + client: "${AUTH_SERVICE_CLIENT:dbrepo-client}" + clientSecret: "${AUTH_SERVICE_CLIENT_SECRET:MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG}" + website: "${BASE_URL:http://localhost}" diff --git a/dbrepo-upload-service/src/test/java/at/tuwien/config/GatewayConfig.java b/dbrepo-upload-service/src/test/java/at/tuwien/config/GatewayConfig.java new file mode 100644 index 0000000000..e360cecfdc --- /dev/null +++ b/dbrepo-upload-service/src/test/java/at/tuwien/config/GatewayConfig.java @@ -0,0 +1,40 @@ +package at.tuwien.config; + +import at.tuwien.interceptor.KeycloakInterceptor; +import lombok.Getter; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.DefaultUriBuilderFactory; + +@Log4j2 +@Getter +@Configuration +public class GatewayConfig { + + @Value("${dbrepo.endpoints.keycloak}") + private String keycloakEndpoint; + + @Value("${dbrepo.keycloak.username}") + private String keycloakUsername; + + @Value("${dbrepo.keycloak.password}") + private String keycloakPassword; + + @Bean + public RestTemplate restTemplate() { + return new RestTemplate(); + } + + @Bean("keycloakRestTemplate") + public RestTemplate keycloakRestTemplate() { + final RestTemplate restTemplate = new RestTemplate(); + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(keycloakEndpoint)); + restTemplate.getInterceptors() + .add(new KeycloakInterceptor(restTemplate(), keycloakUsername, keycloakPassword, keycloakEndpoint)); + return restTemplate; + } + +} diff --git a/dbrepo-upload-service/src/test/java/at/tuwien/config/KeycloakConfig.java b/dbrepo-upload-service/src/test/java/at/tuwien/config/KeycloakConfig.java new file mode 100644 index 0000000000..01be743daa --- /dev/null +++ b/dbrepo-upload-service/src/test/java/at/tuwien/config/KeycloakConfig.java @@ -0,0 +1,83 @@ +package at.tuwien.config; + +import at.tuwien.api.auth.KeycloakErrorDto; +import at.tuwien.api.keycloak.UserCreateDto; +import at.tuwien.api.keycloak.UserDto; +import at.tuwien.exception.AuthServiceConnectionException; +import at.tuwien.exception.AuthServiceException; +import at.tuwien.exception.EmailExistsException; +import at.tuwien.exception.UserExistsException; +import lombok.Getter; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.RestTemplate; + +@Log4j2 +@Getter +@Configuration +public class KeycloakConfig { + + @Value("${dbrepo.endpoints.keycloak}") + private String keycloakEndpoint; + + @Autowired + @Qualifier("keycloakRestTemplate") + private RestTemplate keycloakRestTemplate; + + public Boolean existsByUsername(String username) throws AuthServiceException, AuthServiceConnectionException { + final String path = "/admin/realms/dbrepo/users/?username=" + username; + final ResponseEntity<UserDto[]> response; + try { + response = keycloakRestTemplate.exchange(path, HttpMethod.GET, HttpEntity.EMPTY, UserDto[].class); + } catch (HttpServerErrorException e) { + log.error("Failed to find user: {}", e.getMessage()); + throw new AuthServiceConnectionException("Service unavailable", e); + } catch (Exception e) { + log.error("Failed to find user: unexpected response: {}", e.getMessage()); + throw new AuthServiceException("Unexpected result", e); + } + final UserDto[] body = response.getBody(); + if (body == null || body.length != 1) { + log.error("Failed to find user with username {}", username); + return false; + } + return true; + } + + public void createUser(UserCreateDto data) throws UserExistsException, EmailExistsException, + AuthServiceConnectionException, AuthServiceException { + final String path = "/admin/realms/dbrepo/users"; + final ResponseEntity<Void> response; + try { + response = keycloakRestTemplate.exchange(path, HttpMethod.POST, new HttpEntity<>(data), Void.class); + } catch (HttpServerErrorException e) { + log.error("Failed to create user: {}", e.getMessage()); + throw new AuthServiceConnectionException("Service unavailable", e); + } catch (HttpClientErrorException.Conflict e) { + if (e.getResponseBodyAsByteArray() != null && e.getResponseBodyAsByteArray().length > 0) { + final KeycloakErrorDto error = e.getResponseBodyAs(KeycloakErrorDto.class); + if (error != null && error.getErrorMessage().contains("same email")) { + log.error("Failed to create user: email exists: {}", e.getMessage()); + throw new EmailExistsException("E-Mail exists", e); + } + } + log.error("Failed to create user: user exists: {}", e.getMessage()); + throw new UserExistsException("User exists", e); + } + if (!response.getStatusCode().equals(HttpStatus.CREATED)) { + log.error("Failed to create user: unexpected status: {}", response.getStatusCode().value()); + throw new AuthServiceException("Unexpected status: " + response.getStatusCode().value()); + } + log.debug("Created user {} at auth service", data.getUsername()); + } + +} diff --git a/dbrepo-upload-service/src/test/java/at/tuwien/config/TusdConfig.java b/dbrepo-upload-service/src/test/java/at/tuwien/config/TusdConfig.java new file mode 100644 index 0000000000..af678238de --- /dev/null +++ b/dbrepo-upload-service/src/test/java/at/tuwien/config/TusdConfig.java @@ -0,0 +1,16 @@ +package at.tuwien.config; + +import lombok.Getter; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.client.RestTemplate; + +@Getter +@Configuration +public class TusdConfig { + + @Value("${dbrepo.endpoints.tusd}") + private String tusdEndpoint; + +} diff --git a/dbrepo-upload-service/src/test/java/at/tuwien/config/TusdContainerConfig.java b/dbrepo-upload-service/src/test/java/at/tuwien/config/TusdContainerConfig.java new file mode 100644 index 0000000000..f862df28e9 --- /dev/null +++ b/dbrepo-upload-service/src/test/java/at/tuwien/config/TusdContainerConfig.java @@ -0,0 +1,71 @@ +package at.tuwien.config; + +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.testcontainers.containers.BindMode; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.images.PullPolicy; + +import java.io.File; + +@Configuration +public class TusdContainerConfig { + + public static TusdContainer getContainer() { + return TusdContainer.getInstance(); + } + + @Bean + public TusdContainer tusdContainer() { + return getContainer(); + } + + /** + * This class represents the customized MariaDB container. It is a singleton to avoid the recreation of containers + * which can be very time-consuming. + */ + public static class TusdContainer extends GenericContainer<TusdContainer> { + + private static TusdContainer instance; + + private boolean started = false; + + public static synchronized TusdContainer getInstance() { + final File filePath = new File("pre-create.sh"); + if (instance == null) { + instance = new TusdContainer("tusproject/tusd:v2.4.0"); + instance.withFileSystemBind(filePath.getAbsolutePath(), "/srv/tusd-hooks/pre-create", BindMode.READ_ONLY); + instance.withExposedPorts(8080); + instance.withCommand("-max-size=2000000000", + "-base-path=/api/upload/files/", + "-hooks-dir=/srv/tusd-hooks/"); + instance.withImagePullPolicy(PullPolicy.alwaysPull()); + } + return instance; + } + + private TusdContainer(String dockerImageName) { + super(dockerImageName); + } + + @Override + protected void configure() { + super.configure(); + } + + @Override + public synchronized void start() { + if (!started) { + super.stop(); + super.start(); + started = true; + } + } + + @Override + public void stop() { + // do nothing, JVM handles shut down + } + } +} diff --git a/dbrepo-upload-service/src/test/java/at/tuwien/interceptor/KeycloakInterceptor.java b/dbrepo-upload-service/src/test/java/at/tuwien/interceptor/KeycloakInterceptor.java new file mode 100644 index 0000000000..569653a104 --- /dev/null +++ b/dbrepo-upload-service/src/test/java/at/tuwien/interceptor/KeycloakInterceptor.java @@ -0,0 +1,61 @@ +package at.tuwien.interceptor; + +import at.tuwien.api.keycloak.TokenDto; +import lombok.extern.log4j.Log4j2; +import org.springframework.http.*; +import org.springframework.http.client.ClientHttpRequestExecution; +import org.springframework.http.client.ClientHttpRequestInterceptor; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.util.LinkedMultiValueMap; +import org.springframework.util.MultiValueMap; +import org.springframework.web.client.HttpServerErrorException; +import org.springframework.web.client.ResourceAccessException; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.DefaultUriBuilderFactory; + +import java.io.IOException; + +@Log4j2 +public class KeycloakInterceptor implements ClientHttpRequestInterceptor { + + private final String adminUsername; + private final String adminPassword; + private final String keycloakEndpoint; + private final RestTemplate restTemplate; + + public KeycloakInterceptor(RestTemplate restTemplate, String adminUsername, String adminPassword, + String keycloakEndpoint) { + this.adminUsername = adminUsername; + this.adminPassword = adminPassword; + this.keycloakEndpoint = keycloakEndpoint; + this.restTemplate = restTemplate; + } + + @Override + public ClientHttpResponse intercept(HttpRequest request, byte[] body, ClientHttpRequestExecution execution) + throws IOException { + restTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(keycloakEndpoint)); + final HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); + final MultiValueMap<String, String> payload = new LinkedMultiValueMap<>(); + payload.add("username", adminUsername); + payload.add("password", adminPassword); + payload.add("grant_type", "password"); + payload.add("client_id", "admin-cli"); + final String path = "/realms/master/protocol/openid-connect/token"; + log.trace("obtain admin token at endpoint {} with path {}", keycloakEndpoint, path); + final ResponseEntity<TokenDto> response; + try { + response = restTemplate.exchange(path, HttpMethod.POST, new HttpEntity<>(payload, headers), TokenDto.class); + } catch (ResourceAccessException | HttpServerErrorException.ServiceUnavailable e) { + log.error("Failed to obtain admin token: {}", e.getMessage()); + return execution.execute(request, body); + } + if (response.getBody() == null) { + return execution.execute(request, body); + } + request.getHeaders().set("Authorization", "Bearer " + response.getBody().getAccessToken()); + log.trace("set header: Authorization {} (shortened)", response.getBody().getAccessToken().substring(0, 5)); + return execution.execute(request, body); + } +} diff --git a/dbrepo-upload-service/src/test/java/at/tuwien/service/UploadServiceIntegrationTest.java b/dbrepo-upload-service/src/test/java/at/tuwien/service/UploadServiceIntegrationTest.java new file mode 100644 index 0000000000..30fd6752c3 --- /dev/null +++ b/dbrepo-upload-service/src/test/java/at/tuwien/service/UploadServiceIntegrationTest.java @@ -0,0 +1,138 @@ +package at.tuwien.service; + +import at.tuwien.api.error.ApiErrorDto; +import at.tuwien.api.keycloak.CredentialDto; +import at.tuwien.api.keycloak.CredentialTypeDto; +import at.tuwien.api.keycloak.UserCreateDto; +import at.tuwien.config.KeycloakConfig; +import at.tuwien.config.TusdConfig; +import at.tuwien.config.TusdContainerConfig; +import at.tuwien.exception.AuthServiceConnectionException; +import at.tuwien.exception.AuthServiceException; +import at.tuwien.exception.EmailExistsException; +import at.tuwien.exception.UserExistsException; +import at.tuwien.interceptor.KeycloakInterceptor; +import com.github.dockerjava.api.model.ExposedPort; +import dasniko.testcontainers.keycloak.KeycloakContainer; +import lombok.extern.log4j.Log4j2; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; +import org.springframework.http.*; +import org.springframework.test.context.DynamicPropertyRegistry; +import org.springframework.test.context.DynamicPropertySource; +import org.springframework.test.context.junit.jupiter.SpringExtension; +import org.springframework.web.client.HttpClientErrorException; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.DefaultUriBuilderFactory; +import org.testcontainers.images.PullPolicy; +import org.testcontainers.junit.jupiter.Container; +import org.testcontainers.junit.jupiter.Testcontainers; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +@Log4j2 +@Testcontainers +@SpringBootTest +@ExtendWith(SpringExtension.class) +public class UploadServiceIntegrationTest { + + @Autowired + private RestTemplate restTemplate; + + @Autowired + private TusdConfig tusdConfig; + + @Autowired + private KeycloakConfig keycloakConfig; + + @Container + private static TusdContainerConfig.TusdContainer tusdContainer = TusdContainerConfig.TusdContainer.getInstance(); + + @Container + private static KeycloakContainer keycloakContainer = new KeycloakContainer("quay.io/keycloak/keycloak:24.0") + .withImagePullPolicy(PullPolicy.alwaysPull()) + .withRealmImportFile("init/dbrepo-realm.json") + .withEnv("KC_HOSTNAME_STRICT_HTTPS", "false") + .withCreateContainerCmdModifier(it -> it.withName("auth-service") + .withExposedPorts(ExposedPort.tcp(8080))); + + @DynamicPropertySource + static void dynamicProperties(DynamicPropertyRegistry registry) { + registry.add("dbrepo.endpoints.tusd", () -> "http://localhost:" + tusdContainer.getMappedPort(8080) + "/api/upload/files"); + registry.add("dbrepo.endpoints.keycloak", () -> keycloakContainer.getAuthServerUrl()); + } + + @BeforeEach + public void beforeEach() throws UserExistsException, AuthServiceException, AuthServiceConnectionException, + EmailExistsException { + if (keycloakConfig.existsByUsername(keycloakContainer.getAdminUsername())) { + return; + } + final UserCreateDto payload = UserCreateDto.builder() + .username(keycloakContainer.getAdminUsername()) + .credentials(List.of(CredentialDto.builder() + .temporary(false) + .type(CredentialTypeDto.PASSWORD) + .value(keycloakContainer.getAdminPassword()) + .build())) + .build(); + keycloakConfig.createUser(payload); + } + + @Test + public void upload_missingAuthentication_fails() { + final HttpHeaders requestHeaders = new HttpHeaders(); + requestHeaders.set("Tus-Resumable", "1.0.0"); + requestHeaders.set("Upload-Length", "100"); + requestHeaders.set("Content-Type", "application/offset+octet-stream"); + + /* test */ + assertThrows(HttpClientErrorException.BadRequest.class, () -> { + restTemplate.exchange(tusdConfig.getTusdEndpoint(), HttpMethod.POST, new HttpEntity<>("Hello this is a test aaa", requestHeaders), ApiErrorDto.class); + }); + } + + @Test + public void upload_invalidAuthentication_fails() { + final HttpHeaders requestHeaders = new HttpHeaders(); + requestHeaders.set("Tus-Resumable", "1.0.0"); + requestHeaders.set("Upload-Length", "100"); + requestHeaders.set("Content-Type", "application/offset+octet-stream"); + requestHeaders.set("Authorization", "ey12345"); + + /* test */ + assertThrows(HttpClientErrorException.Unauthorized.class, () -> { + restTemplate.exchange(tusdConfig.getTusdEndpoint(), HttpMethod.POST, new HttpEntity<>("Hello this is a test aaa", requestHeaders), ApiErrorDto.class); + }); + } + + @Test + public void upload_succeeds() { + final RestTemplate uploadRestTemplate = new RestTemplate(); + uploadRestTemplate.setUriTemplateHandler(new DefaultUriBuilderFactory(tusdConfig.getTusdEndpoint())); + uploadRestTemplate.getInterceptors() + .add(new KeycloakInterceptor(restTemplate, keycloakContainer.getAdminUsername(), + keycloakContainer.getAdminPassword(), keycloakConfig.getKeycloakEndpoint())); + + /* test */ + final HttpHeaders requestHeaders = new HttpHeaders(); + requestHeaders.set("Tus-Resumable", "1.0.0"); + requestHeaders.set("Upload-Length", "100"); + requestHeaders.set("Content-Type", "application/offset+octet-stream"); + try { + final ResponseEntity<Void> response = uploadRestTemplate.exchange("", HttpMethod.POST, new HttpEntity<>( + "Hello this is a test aaa", requestHeaders), Void.class); + } catch (Exception e) { + /* ignore */ + } + System.out.println(""); +// assertEquals(HttpStatus.OK, response.getStatusCode()); + } + +} diff --git a/dbrepo-upload-service/src/test/resources/application.properties b/dbrepo-upload-service/src/test/resources/application.properties new file mode 100644 index 0000000000..088fec498b --- /dev/null +++ b/dbrepo-upload-service/src/test/resources/application.properties @@ -0,0 +1,23 @@ +# enable local spring profile +spring.profiles.active=local,junit + +# disable discovery +spring.cloud.discovery.enabled=false + +# internal datasource +spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS DBREPO;NON_KEYWORDS=value +spring.datasource.driverClassName=org.h2.Driver +spring.datasource.username=sa +spring.datasource.password=password +spring.jpa.database-platform=org.hibernate.dialect.H2Dialect +spring.sql.init.mode=always +spring.sql.init.schema-locations=classpath*:init/schema.sql +spring.jpa.hibernate.ddl-auto=create + +# logging +logging.level.root=error +logging.level.at.tuwien.=trace +logging.level.org.testcontainers.=info +logging.level.tc.=info +logging.level.com.github.dockerjava.=warn +logging.level.com.github.dockerjava.zerodep.shaded.org.apache.hc.client5.http.wire.=off diff --git a/dbrepo-upload-service/src/test/resources/init/dbrepo-realm.json b/dbrepo-upload-service/src/test/resources/init/dbrepo-realm.json new file mode 100644 index 0000000000..588053e15f --- /dev/null +++ b/dbrepo-upload-service/src/test/resources/init/dbrepo-realm.json @@ -0,0 +1,2822 @@ +{ + "id" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "realm" : "dbrepo", + "notBefore" : 0, + "defaultSignatureAlgorithm" : "RS256", + "revokeRefreshToken" : false, + "refreshTokenMaxReuse" : 1, + "accessTokenLifespan" : 900, + "accessTokenLifespanForImplicitFlow" : 900, + "ssoSessionIdleTimeout" : 864000, + "ssoSessionMaxLifespan" : 2592000, + "ssoSessionIdleTimeoutRememberMe" : 0, + "ssoSessionMaxLifespanRememberMe" : 0, + "offlineSessionIdleTimeout" : 2592000, + "offlineSessionMaxLifespanEnabled" : false, + "offlineSessionMaxLifespan" : 5184000, + "clientSessionIdleTimeout" : 0, + "clientSessionMaxLifespan" : 0, + "clientOfflineSessionIdleTimeout" : 0, + "clientOfflineSessionMaxLifespan" : 0, + "accessCodeLifespan" : 60, + "accessCodeLifespanUserAction" : 300, + "accessCodeLifespanLogin" : 1800, + "actionTokenGeneratedByAdminLifespan" : 43200, + "actionTokenGeneratedByUserLifespan" : 1800, + "oauth2DeviceCodeLifespan" : 600, + "oauth2DevicePollingInterval" : 5, + "enabled" : true, + "sslRequired" : "none", + "registrationAllowed" : false, + "registrationEmailAsUsername" : false, + "rememberMe" : false, + "verifyEmail" : true, + "loginWithEmailAllowed" : false, + "duplicateEmailsAllowed" : false, + "resetPasswordAllowed" : false, + "editUsernameAllowed" : false, + "bruteForceProtected" : false, + "permanentLockout" : false, + "maxFailureWaitSeconds" : 900, + "minimumQuickLoginWaitSeconds" : 60, + "waitIncrementSeconds" : 60, + "quickLoginCheckMilliSeconds" : 1000, + "maxDeltaTimeSeconds" : 43200, + "failureFactor" : 30, + "roles" : { + "realm" : [ { + "id" : "48f38342-1e3f-427a-995d-c436eaee65cb", + "name" : "default-user-handling", + "description" : "${default-user-handling}", + "composite" : true, + "composites" : { + "realm" : [ "modify-user-theme", "modify-user-information" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "9bb4a8dc-28e0-4645-b62f-cc94425f0cb0", + "name" : "default-maintenance-handling", + "description" : "${default-maintenance-handling}", + "composite" : true, + "composites" : { + "realm" : [ "create-maintenance-message", "find-maintenance-message", "update-maintenance-message", "delete-maintenance-message", "list-maintenance-messages" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "7ee1c424-11b0-46a9-b0ed-725e9b7fc40c", + "name" : "default-system-roles", + "description" : "${default-system-roles}", + "composite" : true, + "composites" : { + "realm" : [ "delete-database-view", "update-semantic-unit", "export-query-data", "default-data-steward-roles", "execute-query", "default-user-handling", "delete-table-data", "find-query", "list-database-views", "persist-query", "update-search-index", "delete-database-access", "view-table-history", "create-ontology", "update-ontology", "modify-user-theme", "default-system-roles", "create-semantic-concept", "default-container-handling", "create-container", "create-table", "default-broker-handling", "default-maintenance-handling", "execute-semantic-query", "uma_authorization", "table-semantic-analyse", "list-containers", "check-database-access", "escalated-query-handling", "delete-identifier", "modify-database-owner", "list-tables", "export-table-data", "create-database-access", "delete-container", "re-execute-query", "create-semantic-unit", "escalated-identifier-handling", "system", "update-table-statistic", "escalated-semantics-handling", "default-database-handling", "delete-ontology", "find-database", "find-database-view", "update-semantic-concept", "find-user", "import-database-data", "publish-identifier", "default-roles-dbrepo", "find-foreign-user", "create-database", "create-maintenance-message", "find-maintenance-message", "escalated-container-handling", "default-researcher-roles", "default-identifier-handling", "escalated-user-handling", "modify-user-information", "create-database-view", "update-maintenance-message", "delete-foreign-table", "offline_access", "modify-foreign-table-column-semantics", "delete-maintenance-message", "find-container", "insert-table-data", "modify-identifier-metadata", "modify-database-image", "escalated-broker-handling", "modify-table-column-semantics", "escalated-database-handling", "default-semantics-handling", "update-database-access", "default-query-handling", "find-table", "list-queries", "default-developer-roles", "create-identifier", "escalated-table-handling", "find-identifier", "view-database-view-data", "view-table-data", "list-licenses", "default-table-handling", "list-identifiers", "create-foreign-identifier", "list-databases", "list-ontologies", "modify-database-visibility", "list-maintenance-messages", "delete-table" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "143ba359-5fa2-451e-8296-43ecf20bb251", + "name" : "update-semantic-concept", + "description" : "${update-semantic-concept}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "5136d7a3-e3f0-4585-bacd-15cb8a56095c", + "name" : "escalated-container-handling", + "description" : "${escalated-container-handling}", + "composite" : true, + "composites" : { + "realm" : [ "create-container", "delete-container" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "b0bc8649-7d84-4dd3-84f0-7f174425babe", + "name" : "list-tables", + "description" : "${list-tables}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "bfd85d9c-2772-4660-a8f0-cdc0cd8252b3", + "name" : "default-database-handling", + "description" : "${default-database-handling}", + "composite" : true, + "composites" : { + "realm" : [ "modify-database-image", "modify-database-owner", "update-database-access", "create-database", "list-databases", "create-database-access", "find-database", "modify-database-visibility", "import-database-data", "delete-database-access", "check-database-access" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "74648f9a-777e-4ef9-b97b-4c5d749d862f", + "name" : "update-search-index", + "description" : "${update-search-index}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "22492b64-c633-48a0-9678-b28669f2885b", + "name" : "execute-semantic-query", + "description" : "${execute-semantic-query}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "4ed919fa-edc5-44e5-9411-607786e4a86d", + "name" : "view-table-history", + "description" : "${view-table-history}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "d89a2881-b642-4abb-b990-196e71372f6b", + "name" : "default-table-handling", + "description" : "${default-table-handling}", + "composite" : true, + "composites" : { + "realm" : [ "modify-table-column-semantics", "list-tables", "update-table-statistic", "find-table", "create-table", "delete-table" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "b0d66d3d-59b4-4aae-aa66-e3d5a49f28e3", + "name" : "view-database-view-data", + "description" : "${view-database-view-data}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "f5ea431a-9b2c-4195-bcb4-9511f38e4b44", + "name" : "create-database-view", + "description" : "${create-database-view}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "a5ffc20e-8b11-498c-9f3b-b5740aec24c7", + "name" : "default-semantics-handling", + "description" : "${default-semantics-handling}", + "composite" : true, + "composites" : { + "realm" : [ "create-semantic-unit", "create-semantic-concept", "execute-semantic-query", "table-semantic-analyse" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "fe4a01f3-6590-4df6-9ade-5a9c1fae4736", + "name" : "create-semantic-unit", + "description" : "${create-semantic-unit}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "0e12eedf-545d-4d32-ac4d-2821dcb118b8", + "name" : "update-table-statistic", + "description" : "${update-table-statistic}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "e63e61a2-d852-4ad3-bfb5-92d9ceafef6a", + "name" : "escalated-user-handling", + "description" : "${escalated-user-handling}", + "composite" : true, + "composites" : { + "realm" : [ "find-user" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "be4e1aba-e276-4241-b6ea-01dce6c52f8b", + "name" : "find-container", + "description" : "${find-container}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "3a801b48-f3c2-4bc6-aa25-c7a91d5b32a7", + "name" : "default-researcher-roles", + "description" : "${default-researcher-roles}", + "composite" : true, + "composites" : { + "realm" : [ "default-table-handling", "default-semantics-handling", "default-container-handling", "default-query-handling", "default-user-handling", "default-database-handling", "default-broker-handling", "default-identifier-handling" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "3d8104fb-8307-40f0-b4b2-c3e518957110", + "name" : "view-table-data", + "description" : "${view-table-data}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "fe71b907-7020-44ab-9964-da2b87264582", + "name" : "create-database", + "description" : "${create-database}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "e51b63c2-48dd-4bd6-95fb-d257d21b26ba", + "name" : "import-database-data", + "description" : "${import-database-data}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "1f0a9b13-c2b8-474c-bc08-59dbd71835a6", + "name" : "modify-database-image", + "description" : "${modify-database-image}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "a7ad038c-5c06-42fc-951c-15ac09d4df66", + "name" : "modify-database-owner", + "description" : "${modify-database-owner}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "c12c1f4e-186f-4153-a795-26e79fb623d6", + "name" : "create-ontology", + "description" : "${create-ontology}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "b60a5694-4099-4f7d-a7e9-4c433e0eb9c9", + "name" : "update-semantic-unit", + "description" : "${update-semantic-unit}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "e9854bbb-4580-4757-b1ae-305934173249", + "name" : "create-database-access", + "description" : "${create-database-access}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "50c604c1-7c6e-43f3-9c43-2398f5eff66e", + "name" : "list-databases", + "description" : "${list-databases}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "535f1484-4514-4d24-8d97-e3f6c11a426b", + "name" : "create-container", + "description" : "${create-container}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "f4116230-8642-4bb7-bbc8-db9c5c07b558", + "name" : "create-maintenance-message", + "description" : "${create-maintenance-message}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "973f0999-cc70-4b28-9f43-979c470bea8e", + "name" : "default-data-steward-roles", + "description" : "${default-data-steward-roles}", + "composite" : true, + "composites" : { + "realm" : [ "escalated-identifier-handling", "default-semantics-handling", "escalated-semantics-handling", "default-user-handling" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "e1383fb7-d54c-4732-9146-93030eb2ca50", + "name" : "escalated-query-handling", + "description" : "${escalated-query-handling}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "993b5c69-9eb2-42af-ac28-b4a46c6b61f2", + "name" : "find-user", + "description" : "${find-user}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "e4cfdc4d-2373-477b-a8df-161db99aba00", + "name" : "create-foreign-identifier", + "description" : "${create-foreign-identifier}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "6a5872a5-2b51-415d-ae2d-25a6db4a35df", + "name" : "escalated-semantics-handling", + "description" : "${escalated-semantics-handling}", + "composite" : true, + "composites" : { + "realm" : [ "update-semantic-unit", "create-ontology", "update-ontology", "list-ontologies", "delete-ontology", "modify-foreign-table-column-semantics", "update-semantic-concept" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "09147c48-273b-450b-8b11-7ef9b9245244", + "name" : "export-table-data", + "description" : "${export-table-data}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "d14af590-60a8-4d75-b864-40ee0165bd7f", + "name" : "delete-database-access", + "description" : "${delete-database-access}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "be051d45-cd74-4b13-8a45-f2d3351bd995", + "name" : "table-semantic-analyse", + "description" : "${table-semantic-analyse}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "272a79a7-e282-4261-8f7d-5d5d1364243a", + "name" : "update-maintenance-message", + "description" : "${update-maintenance-message}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "64c16bfb-2015-48ad-a23f-637ff24419cb", + "name" : "default-query-handling", + "description" : "${default-query-handling}", + "composite" : true, + "composites" : { + "realm" : [ "delete-database-view", "export-query-data", "execute-query", "delete-table-data", "export-table-data", "list-queries", "find-query", "list-database-views", "persist-query", "view-database-view-data", "view-table-data", "re-execute-query", "view-table-history", "create-database-view", "find-database-view", "insert-table-data" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "c047d521-cec3-4444-86c4-aef098489b7b", + "name" : "delete-maintenance-message", + "description" : "${delete-maintenance-message}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "88f82262-be80-4d18-9fb4-5529da031f33", + "name" : "system", + "description" : "${system}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "e14ab76b-1c24-484d-ae2d-478b8457edea", + "name" : "list-licenses", + "description" : "${list-licenses}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "d4f29937-3ca0-41e9-9786-2b7b921b6cdd", + "name" : "modify-foreign-table-column-semantics", + "description" : "${modify-foreign-table-column-semantics}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "8eda9f5c-938c-4915-bed5-6a81a1de15a8", + "name" : "list-database-views", + "description" : "${list-database-views}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "b372f8f7-d203-4293-b991-ad93fb505917", + "name" : "escalated-database-handling", + "description" : "${escalated-database-handling}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "abd2d9ee-ebc4-4d0a-839e-6b588a6d442a", + "name" : "default-roles-dbrepo", + "description" : "${role_default-roles}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "3293799a-82b9-4f47-8f25-1aad2e0222fd", + "name" : "find-identifier", + "description" : "${find-identifier}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "aaa3f804-38a0-4474-b8e9-f1020c4b3f62", + "name" : "list-queries", + "description" : "${list-queries}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "76e38f7b-99bf-4d12-8d74-1c7d8812f443", + "name" : "update-ontology", + "description" : "${update-ontology}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "11f7973e-d1eb-42cb-a35d-c59dfc122775", + "name" : "modify-user-theme", + "description" : "${modify-user-theme}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "f392bfcb-0be5-4fad-9ce4-8ac6396f176d", + "name" : "export-query-data", + "description" : "${export-query-data}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "da493b7e-fb9b-43ca-82a5-e274ad2e6b39", + "name" : "find-query", + "description" : "${find-query}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "a4d4a788-ebcf-4d32-baed-4a85616ca037", + "name" : "escalated-identifier-handling", + "description" : "${escalated-identifier-handling}", + "composite" : true, + "composites" : { + "realm" : [ "create-foreign-identifier", "modify-identifier-metadata" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "ea38d69d-17b8-4c65-95e8-1c3501b83618", + "name" : "default-container-handling", + "description" : "${default-container-handling}", + "composite" : true, + "composites" : { + "realm" : [ "find-container", "list-containers" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "8b8813e0-af07-4d04-a8c1-e3f37192bace", + "name" : "publish-identifier", + "description" : "${publish-identifier}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "47f5eee7-9821-4bf8-b434-0da1f81c3e5a", + "name" : "default-broker-handling", + "description" : "${default-broker-handling}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "71874bde-64a5-4a69-8685-d8998303a80c", + "name" : "delete-table-data", + "description" : "${delete-table-data}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "7c0306fc-3b03-4c64-87d1-9a34f2073977", + "name" : "modify-table-column-semantics", + "description" : "${modify-table-column-semantics}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "cd0ee04c-4a5e-4035-a11b-f6a1165f7829", + "name" : "delete-container", + "description" : "${delete-container}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "67ee39c0-d601-4a67-a0fe-c4f0021d557e", + "name" : "list-containers", + "description" : "${list-containers}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "795c7bb8-3502-414a-a97b-2ba1cfd6a79c", + "name" : "persist-query", + "description" : "${persist-query}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "d05e7698-ddf5-4f20-9027-771afb2cc3c7", + "name" : "list-identifiers", + "description" : "${list-identifiers}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "e4bfaf36-9a5d-43e0-9fa3-0f4ea7bad8d0", + "name" : "default-developer-roles", + "description" : "${default-developer-roles}", + "composite" : true, + "composites" : { + "realm" : [ "escalated-query-handling", "escalated-broker-handling", "default-table-handling", "escalated-database-handling", "default-container-handling", "default-query-handling", "default-user-handling", "default-database-handling", "default-maintenance-handling", "escalated-container-handling", "escalated-table-handling", "default-identifier-handling" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "e2cb054e-ea41-4ab0-881b-e6f576f7424e", + "name" : "create-semantic-concept", + "description" : "${create-semantic-concept}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "feb612cc-96a6-4ed2-aaa5-01f39b25beb5", + "name" : "insert-table-data", + "description" : "${insert-table-data}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "a0942e33-441b-4343-9f02-4353d03f7bbb", + "name" : "find-database", + "description" : "${find-database}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "6a0bb740-4448-49be-aee8-6dd183325be5", + "name" : "delete-foreign-table", + "description" : "${delete-foreign-table}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "7f3652c7-3073-4566-ab63-25385495ebc3", + "name" : "modify-database-visibility", + "description" : "${modify-database-visibility}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "4a5df51d-f14d-41a2-ad70-6521df5a5b4f", + "name" : "offline_access", + "description" : "${role_offline-access}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "fd41c4c3-d2f8-4f49-84c7-dba84e9a5575", + "name" : "execute-query", + "description" : "${execute-query}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "2963c2bb-b129-4224-b98f-c8eeab8e72d1", + "name" : "create-table", + "description" : "${create-table}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "0c487c93-448f-4a82-8b9f-ebd8a0904bf8", + "name" : "find-foreign-user", + "description" : "${find-foreign-user}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "cf9735a9-fb70-4cc5-b5f4-75afc4e5654b", + "name" : "modify-identifier-metadata", + "description" : "${modify-identifier-metadata}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "64c2b8f2-1527-4928-81ea-b2651512d028", + "name" : "delete-ontology", + "description" : "${delete-ontology}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "d6e38368-b40f-423b-82e4-e8aa595237c9", + "name" : "find-maintenance-message", + "description" : "${find-maintenance-message}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "fd1cc463-3e67-49d9-81b8-2cd90c1daa9c", + "name" : "check-database-access", + "description" : "${check-database-access}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "74013867-e426-46cc-ab98-2f4a9225ad1e", + "name" : "find-table", + "description" : "${find-table}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "a2cc60df-d280-46c5-a539-92e2aa249b4a", + "name" : "modify-user-information", + "description" : "${modify-user-information}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "c367241f-b5b5-491f-84d5-07fe1bef3877", + "name" : "default-identifier-handling", + "description" : "${default-identifier-handling}", + "composite" : true, + "composites" : { + "realm" : [ "delete-identifier", "list-identifiers", "create-identifier", "find-identifier", "publish-identifier" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "ba1ad8f2-39aa-487d-987f-645e8a459559", + "name" : "delete-table", + "description" : "${delete-table}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "09f7bdb0-296f-46c8-a3a3-8f9254fb17e4", + "name" : "list-maintenance-messages", + "description" : "${list-maintenance-messages}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "fe3bc45c-61c2-4ece-bcaf-d410dc7de501", + "name" : "update-database-access", + "description" : "${update-database-access}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "f43e86ed-76de-4ca8-9b5e-c292c9359bfe", + "name" : "escalated-broker-handling", + "description" : "${escalated-broker-handling}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "916b1e65-f60c-42cd-96e4-5c98ffc1ba3c", + "name" : "uma_authorization", + "description" : "${role_uma_authorization}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "d1afa3ed-bf4f-469a-a061-ad7325fb8d9e", + "name" : "delete-database-view", + "description" : "${delete-database-view}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "6f044bad-6651-4408-bffa-20c2d8f92eee", + "name" : "create-identifier", + "description" : "${create-identifier}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "be91195a-e30a-4d15-a8da-0aca0a68782f", + "name" : "escalated-table-handling", + "description" : "${escalated-table-handling}", + "composite" : true, + "composites" : { + "realm" : [ "delete-foreign-table" ] + }, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "98bee7d6-d78c-4e7f-b6a3-3705968b248c", + "name" : "list-ontologies", + "description" : "${list-ontologies}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "15720c6b-027d-4d53-a0ff-0124bfab7c4c", + "name" : "re-execute-query", + "description" : "${re-execute-query}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "a9b5181a-8135-41d3-9862-ef80af42211d", + "name" : "delete-identifier", + "description" : "${delete-identifier}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + }, { + "id" : "469c2e63-cda6-48d4-ab8f-eb59a2c69798", + "name" : "find-database-view", + "description" : "${find-database-view}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0", + "attributes" : { } + } ], + "client" : { + "realm-management" : [ { + "id" : "4628f654-f8f3-483b-8f92-2a7fc5930b14", + "name" : "query-realms", + "description" : "${role_query-realms}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "95c2cc47-12f5-4d73-8b74-67e270c45ade", + "name" : "manage-authorization", + "description" : "${role_manage-authorization}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "824791f3-c345-42f8-b103-b7e6d7e40114", + "name" : "manage-identity-providers", + "description" : "${role_manage-identity-providers}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "1f840202-b7e2-4195-bac9-64e64dad2037", + "name" : "view-identity-providers", + "description" : "${role_view-identity-providers}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "3c32c096-bb13-44c9-a080-d756a48a9ea3", + "name" : "query-clients", + "description" : "${role_query-clients}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "e4b85a68-7f31-4fcf-89a2-f10d7df358e9", + "name" : "view-authorization", + "description" : "${role_view-authorization}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "7d317752-ae56-46f2-a2ce-67c64d1b35f6", + "name" : "view-users", + "description" : "${role_view-users}", + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "query-users", "query-groups" ] + } + }, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "28824208-976e-4622-b4d7-3d18efbb46fa", + "name" : "realm-admin", + "description" : "${role_realm-admin}", + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "query-realms", "view-identity-providers", "manage-identity-providers", "manage-authorization", "query-clients", "view-authorization", "view-users", "manage-users", "view-realm", "query-users", "view-clients", "query-groups", "create-client", "manage-clients", "manage-events", "impersonation", "view-events", "manage-realm" ] + } + }, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "57e846a2-930d-4621-819d-c35086507146", + "name" : "manage-users", + "description" : "${role_manage-users}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "7fad9cde-bf96-475a-9174-14a87da51f95", + "name" : "view-realm", + "description" : "${role_view-realm}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "bbcac294-d78a-4ea1-a4bf-0384266d2fe1", + "name" : "query-users", + "description" : "${role_query-users}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "480e1437-ab9e-47de-b47a-edc6b6e285de", + "name" : "view-clients", + "description" : "${role_view-clients}", + "composite" : true, + "composites" : { + "client" : { + "realm-management" : [ "query-clients" ] + } + }, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "b9a9a8f5-f91e-4e73-9e88-1cdf42bd49f9", + "name" : "create-client", + "description" : "${role_create-client}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "4d1397fb-247c-436f-b26f-124cd89afb08", + "name" : "query-groups", + "description" : "${role_query-groups}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "e31f522b-b283-4ae1-b875-52afcd98b1d2", + "name" : "impersonation", + "description" : "${role_impersonation}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "51822d02-fa28-4a49-89da-bc534719d8a8", + "name" : "manage-clients", + "description" : "${role_manage-clients}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "b2743ce5-0ce8-4157-ae00-f693560f0b39", + "name" : "manage-events", + "description" : "${role_manage-events}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "7ea3d7e0-9bf4-438a-b773-243daf622aaa", + "name" : "view-events", + "description" : "${role_view-events}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + }, { + "id" : "fb73f6f5-0ed5-41d0-852c-0eb3b195b15a", + "name" : "manage-realm", + "description" : "${role_manage-realm}", + "composite" : false, + "clientRole" : true, + "containerId" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "attributes" : { } + } ], + "security-admin-console" : [ ], + "dbrepo-client" : [ ], + "admin-cli" : [ ], + "rabbitmq-client" : [ ], + "account-console" : [ ], + "broker" : [ { + "id" : "de0cfd5e-c2fe-4082-ac39-e3b092139a0f", + "name" : "read-token", + "description" : "${role_read-token}", + "composite" : false, + "clientRole" : true, + "containerId" : "88694c91-753d-4c44-9740-ec9ac06bba45", + "attributes" : { } + } ], + "account" : [ { + "id" : "acd78c04-eefc-4344-a5b4-3fc83d848936", + "name" : "delete-account", + "description" : "${role_delete-account}", + "composite" : false, + "clientRole" : true, + "containerId" : "e767a4a6-79e9-4e08-82b7-1076e1a09142", + "attributes" : { } + }, { + "id" : "939be844-8c49-45b3-9ca1-4b10a454b346", + "name" : "view-profile", + "description" : "${role_view-profile}", + "composite" : false, + "clientRole" : true, + "containerId" : "e767a4a6-79e9-4e08-82b7-1076e1a09142", + "attributes" : { } + }, { + "id" : "e52fdf00-3e73-4c17-bc1c-643493710a6b", + "name" : "view-applications", + "description" : "${role_view-applications}", + "composite" : false, + "clientRole" : true, + "containerId" : "e767a4a6-79e9-4e08-82b7-1076e1a09142", + "attributes" : { } + }, { + "id" : "b02a822e-a708-420a-bddc-1a315033fd7c", + "name" : "view-consent", + "description" : "${role_view-consent}", + "composite" : false, + "clientRole" : true, + "containerId" : "e767a4a6-79e9-4e08-82b7-1076e1a09142", + "attributes" : { } + }, { + "id" : "c590e5f5-2cbf-4151-b1dc-96c454f1f654", + "name" : "view-groups", + "description" : "${role_view-groups}", + "composite" : false, + "clientRole" : true, + "containerId" : "e767a4a6-79e9-4e08-82b7-1076e1a09142", + "attributes" : { } + }, { + "id" : "15974151-6c13-426b-8cc3-7683dd1311e1", + "name" : "manage-account-links", + "description" : "${role_manage-account-links}", + "composite" : false, + "clientRole" : true, + "containerId" : "e767a4a6-79e9-4e08-82b7-1076e1a09142", + "attributes" : { } + }, { + "id" : "c12d8d94-c2df-498e-bbe4-2f934a83ae92", + "name" : "manage-consent", + "description" : "${role_manage-consent}", + "composite" : true, + "composites" : { + "client" : { + "account" : [ "view-consent" ] + } + }, + "clientRole" : true, + "containerId" : "e767a4a6-79e9-4e08-82b7-1076e1a09142", + "attributes" : { } + }, { + "id" : "55f85811-bded-4d6b-8f7b-45844b963875", + "name" : "manage-account", + "description" : "${role_manage-account}", + "composite" : true, + "composites" : { + "client" : { + "account" : [ "manage-account-links" ] + } + }, + "clientRole" : true, + "containerId" : "e767a4a6-79e9-4e08-82b7-1076e1a09142", + "attributes" : { } + } ] + } + }, + "groups" : [ { + "id" : "f2ce17fe-7b15-47a4-bbf8-86f415298fa9", + "name" : "data-stewards", + "path" : "/data-stewards", + "attributes" : { }, + "realmRoles" : [ "default-data-steward-roles" ], + "clientRoles" : { }, + "subGroups" : [ ] + }, { + "id" : "124d9888-0b6e-46aa-8225-077dcedaf16e", + "name" : "developers", + "path" : "/developers", + "attributes" : { }, + "realmRoles" : [ "default-developer-roles" ], + "clientRoles" : { }, + "subGroups" : [ ] + }, { + "id" : "f467c38e-9041-4faa-ae0b-39cec65ff4db", + "name" : "researchers", + "path" : "/researchers", + "attributes" : { }, + "realmRoles" : [ "default-researcher-roles" ], + "clientRoles" : { }, + "subGroups" : [ ] + }, { + "id" : "2b9f94b4-d434-4a98-8eab-25678cfee983", + "name" : "system", + "path" : "/system", + "attributes" : { }, + "realmRoles" : [ "default-system-roles" ], + "clientRoles" : { }, + "subGroups" : [ ] + } ], + "defaultRole" : { + "id" : "abd2d9ee-ebc4-4d0a-839e-6b588a6d442a", + "name" : "default-roles-dbrepo", + "description" : "${role_default-roles}", + "composite" : false, + "clientRole" : false, + "containerId" : "82c39861-d877-4667-a0f3-4daa2ee230e0" + }, + "defaultGroups" : [ "/researchers" ], + "requiredCredentials" : [ "password" ], + "otpPolicyType" : "totp", + "otpPolicyAlgorithm" : "HmacSHA1", + "otpPolicyInitialCounter" : 0, + "otpPolicyDigits" : 6, + "otpPolicyLookAheadWindow" : 1, + "otpPolicyPeriod" : 30, + "otpPolicyCodeReusable" : false, + "otpSupportedApplications" : [ "totpAppGoogleName", "totpAppFreeOTPName", "totpAppMicrosoftAuthenticatorName" ], + "webAuthnPolicyRpEntityName" : "keycloak", + "webAuthnPolicySignatureAlgorithms" : [ "ES256" ], + "webAuthnPolicyRpId" : "", + "webAuthnPolicyAttestationConveyancePreference" : "not specified", + "webAuthnPolicyAuthenticatorAttachment" : "not specified", + "webAuthnPolicyRequireResidentKey" : "not specified", + "webAuthnPolicyUserVerificationRequirement" : "not specified", + "webAuthnPolicyCreateTimeout" : 0, + "webAuthnPolicyAvoidSameAuthenticatorRegister" : false, + "webAuthnPolicyAcceptableAaguids" : [ ], + "webAuthnPolicyPasswordlessRpEntityName" : "keycloak", + "webAuthnPolicyPasswordlessSignatureAlgorithms" : [ "ES256" ], + "webAuthnPolicyPasswordlessRpId" : "", + "webAuthnPolicyPasswordlessAttestationConveyancePreference" : "not specified", + "webAuthnPolicyPasswordlessAuthenticatorAttachment" : "not specified", + "webAuthnPolicyPasswordlessRequireResidentKey" : "not specified", + "webAuthnPolicyPasswordlessUserVerificationRequirement" : "not specified", + "webAuthnPolicyPasswordlessCreateTimeout" : 0, + "webAuthnPolicyPasswordlessAvoidSameAuthenticatorRegister" : false, + "webAuthnPolicyPasswordlessAcceptableAaguids" : [ ], + "scopeMappings" : [ { + "clientScope" : "rabbitmq.tag:administrator", + "roles" : [ "escalated-broker-handling" ] + }, { + "clientScope" : "rabbitmq.tag:management", + "roles" : [ "default-broker-handling" ] + } ], + "clientScopeMappings" : { + "account" : [ { + "client" : "account-console", + "roles" : [ "manage-account", "view-groups" ] + } ] + }, + "clients" : [ { + "id" : "e767a4a6-79e9-4e08-82b7-1076e1a09142", + "clientId" : "account", + "name" : "${client_account}", + "rootUrl" : "${authBaseUrl}", + "baseUrl" : "/realms/dbrepo/account/", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ "/realms/dbrepo/account/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "d3c4a04e-39ce-4549-a34a-11e25774cd96", + "clientId" : "account-console", + "name" : "${client_account-console}", + "rootUrl" : "${authBaseUrl}", + "baseUrl" : "/realms/dbrepo/account/", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ "/realms/dbrepo/account/*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+", + "pkce.code.challenge.method" : "S256" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "22d90d9c-9881-474c-8dfd-a62c808a9f1c", + "name" : "audience resolve", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-audience-resolve-mapper", + "consentRequired" : false, + "config" : { } + } ], + "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "81ef0f59-a5ca-4be4-a1d1-0c32edf1cfd6", + "clientId" : "admin-cli", + "name" : "${client_admin-cli}", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : false, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : true, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "88694c91-753d-4c44-9740-ec9ac06bba45", + "clientId" : "broker", + "name" : "${client_broker}", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : true, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "6b7ef364-4132-4831-b4e2-b6e9e9dc63ee", + "clientId" : "dbrepo-client", + "name" : "${dbrepo-client}", + "description" : "", + "rootUrl" : "", + "adminUrl" : "", + "baseUrl" : "", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : true, + "clientAuthenticatorType" : "client-secret", + "secret" : "MUwRc7yfXSJwX8AdRMWaQC3Nep1VjwgG", + "redirectUris" : [ "*" ], + "webOrigins" : [ "*" ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : true, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : true, + "protocol" : "openid-connect", + "attributes" : { + "oidc.ciba.grant.enabled" : "false", + "client.secret.creation.time" : "1680085365", + "backchannel.logout.session.required" : "true", + "post.logout.redirect.uris" : "*", + "oauth2.device.authorization.grant.enabled" : "false", + "backchannel.logout.revoke.offline.tokens" : "false" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : true, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "da0b27c1-ae2e-4baa-bf78-db233e15c78d", + "name" : "preferred_username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "user.attribute" : "username", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "preferred_username", + "userinfo.token.claim" : "true" + } + }, { + "id" : "7c94de93-f60f-487b-b4b7-1891c67f74cc", + "name" : "aud", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-hardcoded-claim-mapper", + "consentRequired" : false, + "config" : { + "claim.value" : "dbrepo", + "userinfo.token.claim" : "true", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "aud", + "access.tokenResponse.claim" : "false" + } + }, { + "id" : "030a1cd9-53d1-4a62-a375-94d50a2dc6fc", + "name" : "uid", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "aggregate.attrs" : "false", + "multivalued" : "false", + "userinfo.token.claim" : "true", + "user.attribute" : "LDAP_ID", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "uid" + } + } ], + "defaultClientScopes" : [ "roles", "attributes" ], + "optionalClientScopes" : [ "rabbitmq.read:*/*", "web-origins", "acr", "rabbitmq.write:*/*", "address", "phone", "offline_access", "profile", "microprofile-jwt", "email", "rabbitmq.configure:*/*" ] + }, { + "id" : "25741f6b-4867-4138-8238-6345c6ba8702", + "clientId" : "rabbitmq-client", + "name" : "${rabbitmq-client}", + "description" : "", + "rootUrl" : "", + "adminUrl" : "", + "baseUrl" : "", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "secret" : "JEC2FexxrX4N65fLeDGukAl6R3Lc9y0u", + "redirectUris" : [ "*" ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : true, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : true, + "protocol" : "openid-connect", + "attributes" : { + "oidc.ciba.grant.enabled" : "false", + "client.secret.creation.time" : "1680000860", + "backchannel.logout.session.required" : "true", + "post.logout.redirect.uris" : "*", + "oauth2.device.authorization.grant.enabled" : "false", + "backchannel.logout.revoke.offline.tokens" : "false" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : -1, + "protocolMappers" : [ { + "id" : "01a937ed-f0e8-4137-80f3-3be3c447f7fb", + "name" : "username", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-property-mapper", + "consentRequired" : false, + "config" : { + "userinfo.token.claim" : "false", + "user.attribute" : "username", + "id.token.claim" : "false", + "access.token.claim" : "true", + "claim.name" : "client_id", + "jsonType.label" : "String" + } + }, { + "id" : "f1afc22d-f595-403b-ba2e-6ab19d98205e", + "name" : "Audience", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-hardcoded-claim-mapper", + "consentRequired" : false, + "config" : { + "claim.value" : "rabbitmq", + "userinfo.token.claim" : "false", + "id.token.claim" : "false", + "access.token.claim" : "true", + "claim.name" : "aud", + "access.tokenResponse.claim" : "false" + } + } ], + "defaultClientScopes" : [ "web-origins", "acr", "rabbitmq.tag:management" ], + "optionalClientScopes" : [ "rabbitmq.read:*/*", "rabbitmq.write:*/*", "address", "phone", "offline_access", "profile", "roles", "microprofile-jwt", "email", "rabbitmq.configure:*/*" ] + }, { + "id" : "cfffd5d0-aa19-4057-8ca0-f2c51ca0e930", + "clientId" : "realm-management", + "name" : "${client_realm-management}", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ ], + "webOrigins" : [ ], + "notBefore" : 0, + "bearerOnly" : true, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : false, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "defaultClientScopes" : [ "web-origins", "acr", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + }, { + "id" : "f205c451-9524-4380-acc3-947f7ecb6b7c", + "clientId" : "security-admin-console", + "name" : "${client_security-admin-console}", + "rootUrl" : "${authAdminUrl}", + "baseUrl" : "/admin/dbrepo/console/", + "surrogateAuthRequired" : false, + "enabled" : true, + "alwaysDisplayInConsole" : false, + "clientAuthenticatorType" : "client-secret", + "redirectUris" : [ "/admin/dbrepo/console/*" ], + "webOrigins" : [ "+" ], + "notBefore" : 0, + "bearerOnly" : false, + "consentRequired" : false, + "standardFlowEnabled" : true, + "implicitFlowEnabled" : false, + "directAccessGrantsEnabled" : false, + "serviceAccountsEnabled" : false, + "publicClient" : true, + "frontchannelLogout" : false, + "protocol" : "openid-connect", + "attributes" : { + "post.logout.redirect.uris" : "+", + "pkce.code.challenge.method" : "S256" + }, + "authenticationFlowBindingOverrides" : { }, + "fullScopeAllowed" : false, + "nodeReRegistrationTimeout" : 0, + "protocolMappers" : [ { + "id" : "c4d54410-3f22-4259-9571-94da2c43b752", + "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", "acr", "profile", "roles", "email" ], + "optionalClientScopes" : [ "address", "phone", "offline_access", "microprofile-jwt" ] + } ], + "clientScopes" : [ { + "id" : "69f4ecf0-4165-49ab-bf0d-38409b15b706", + "name" : "rabbitmq.tag:administrator", + "description" : "administrator", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "true", + "gui.order" : "", + "consent.screen.text" : "" + } + }, { + "id" : "7f6e9b44-e2eb-417d-b0fe-db820c9a6564", + "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" : [ { + "id" : "782819fe-ba5d-4ddb-9f95-cabb69d79c8d", + "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" + } + }, { + "id" : "ca613fc8-bbf2-4240-8b33-a1874f1559f3", + "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" + } + } ] + }, { + "id" : "b9da268f-6745-49dc-a764-3c54e385accc", + "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" : [ { + "id" : "84f0487a-1d7d-470c-9b8e-5835294ae235", + "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" + } + }, { + "id" : "bbdcdb36-3ec0-443d-b1af-9993d40f0567", + "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" + } + }, { + "id" : "9faa870b-5491-4ce9-b27d-c9ce07d6a95e", + "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" + } + }, { + "id" : "f0e3c012-9523-4076-83ae-e466e2d08220", + "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" + } + }, { + "id" : "f757d8ec-e181-429c-9287-9ad0600b061f", + "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" + } + }, { + "id" : "18cfbf4b-0a8e-45c7-a832-c0f72c92f3f3", + "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" : "long" + } + }, { + "id" : "841ea785-26ab-429a-a420-09ce3948924d", + "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" + } + }, { + "id" : "bfba13ff-f952-4e89-bbb1-a693fdebfae8", + "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" + } + }, { + "id" : "475f071d-5149-4379-b928-76482f5f519c", + "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" + } + }, { + "id" : "b8bebfed-b5e9-4604-a0ee-9817f7d439ac", + "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" + } + }, { + "id" : "445232c8-6830-476c-a6f1-8bbef167595a", + "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" + } + }, { + "id" : "65f2e474-6ede-4872-86e4-e49504dd0f2a", + "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" + } + }, { + "id" : "16cd5a27-ccf3-453c-ae1e-8621813ab73c", + "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" + } + }, { + "id" : "f9efedfc-3388-457c-b10a-1dff4525ff9b", + "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" + } + } ] + }, { + "id" : "627fa054-08eb-4206-af71-9e838e984b8b", + "name" : "microprofile-jwt", + "description" : "Microprofile - JWT built-in scope", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "false" + }, + "protocolMappers" : [ { + "id" : "e6cc53e5-5d7e-468e-88c8-0737dd3dc759", + "name" : "groups", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-realm-role-mapper", + "consentRequired" : false, + "config" : { + "multivalued" : "true", + "userinfo.token.claim" : "true", + "user.attribute" : "foo", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "groups", + "jsonType.label" : "String" + } + }, { + "id" : "83b4444c-10fc-44e8-a0c0-0c1da1f9bba3", + "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" + } + } ] + }, { + "id" : "4122ff9e-ad3c-4142-afc6-9aefdecfc86d", + "name" : "role_list", + "description" : "SAML role list", + "protocol" : "saml", + "attributes" : { + "consent.screen.text" : "${samlRoleListScopeConsentText}", + "display.on.consent.screen" : "true" + }, + "protocolMappers" : [ { + "id" : "bb0747fa-c008-4af3-93be-e7739650ebd5", + "name" : "role list", + "protocol" : "saml", + "protocolMapper" : "saml-role-list-mapper", + "consentRequired" : false, + "config" : { + "single" : "false", + "attribute.nameformat" : "Basic", + "attribute.name" : "Role" + } + } ] + }, { + "id" : "2e76447d-fbe7-4fa7-a16c-54a381b960ae", + "name" : "rabbitmq.configure:*/*", + "description" : "", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "false", + "gui.order" : "", + "consent.screen.text" : "" + } + }, { + "id" : "52aad832-c6c4-49df-8a04-6ad4a406fdfa", + "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" : [ { + "id" : "dae802fb-9138-408a-b80e-a40eb0f56814", + "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" + } + }, { + "id" : "feb06a8d-b0eb-4911-8464-368d93f566fa", + "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" + } + } ] + }, { + "id" : "f64d64e8-57ce-4eb2-b99e-9f02fdbd99f9", + "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" : [ { + "id" : "c6411e3b-6478-453d-b530-5fe175a4d786", + "name" : "allowed web origins", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-allowed-origins-mapper", + "consentRequired" : false, + "config" : { } + } ] + }, { + "id" : "55341d34-0086-4173-ae61-d9b175b179d8", + "name" : "acr", + "description" : "OpenID Connect scope for add acr (authentication context class reference) to the token", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "false", + "display.on.consent.screen" : "false" + }, + "protocolMappers" : [ { + "id" : "58ea3217-0fff-4207-9d08-919f5493b629", + "name" : "acr loa level", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-acr-mapper", + "consentRequired" : false, + "config" : { + "id.token.claim" : "true", + "access.token.claim" : "true", + "userinfo.token.claim" : "true" + } + } ] + }, { + "id" : "a02c2c38-923c-46ec-9899-321412b388e5", + "name" : "attributes", + "description" : "User Attributes", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "false", + "display.on.consent.screen" : "false", + "gui.order" : "", + "consent.screen.text" : "" + }, + "protocolMappers" : [ { + "id" : "78c461c1-f3f9-4d10-8835-097f13bdcd60", + "name" : "Theme", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-usermodel-attribute-mapper", + "consentRequired" : false, + "config" : { + "aggregate.attrs" : "false", + "multivalued" : "false", + "userinfo.token.claim" : "true", + "user.attribute" : "theme_dark", + "id.token.claim" : "true", + "access.token.claim" : "true", + "claim.name" : "attributes.theme_dark" + } + } ] + }, { + "id" : "06062e22-89c0-4e1d-a25b-2483903b02d5", + "name" : "rabbitmq.write:*/*", + "description" : "", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "false", + "gui.order" : "", + "consent.screen.text" : "" + } + }, { + "id" : "db63e03b-7918-492f-997b-f2dda98f3b39", + "name" : "rabbitmq.tag:management", + "description" : "management", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "true", + "gui.order" : "", + "consent.screen.text" : "" + } + }, { + "id" : "210cc792-6c07-45a6-a77e-827cdf3b41ba", + "name" : "offline_access", + "description" : "OpenID Connect built-in scope: offline_access", + "protocol" : "openid-connect", + "attributes" : { + "consent.screen.text" : "${offlineAccessScopeConsentText}", + "display.on.consent.screen" : "true" + } + }, { + "id" : "425abf4a-2ee2-431d-aa92-e373a36fe556", + "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" : [ { + "id" : "8d4ffe4d-1d01-4ca1-8ff4-44eacca61b30", + "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" + } + } ] + }, { + "id" : "c96f0b73-ea79-4b46-93ef-d1092297f855", + "name" : "rabbitmq.read:*/*", + "description" : "", + "protocol" : "openid-connect", + "attributes" : { + "include.in.token.scope" : "true", + "display.on.consent.screen" : "false", + "gui.order" : "", + "consent.screen.text" : "" + } + }, { + "id" : "37f61543-dad7-4a82-8e10-77acdd1eefdc", + "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" : [ { + "id" : "3b6b6914-8ad1-4a71-88ec-444f754aaacb", + "name" : "audience resolve", + "protocol" : "openid-connect", + "protocolMapper" : "oidc-audience-resolve-mapper", + "consentRequired" : false, + "config" : { } + }, { + "id" : "2defedf5-9af3-4531-822c-a879dedcd29d", + "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" + } + }, { + "id" : "a7bd6723-e58e-47f7-95c0-2925ce99283d", + "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" + } + } ] + } ], + "defaultDefaultClientScopes" : [ "rabbitmq.tag:administrator", "rabbitmq.tag:management" ], + "defaultOptionalClientScopes" : [ "rabbitmq.write:*/*", "offline_access", "rabbitmq.configure:*/*", "roles", "role_list", "address", "phone", "acr", "microprofile-jwt", "email", "attributes", "profile", "rabbitmq.read:*/*", "web-origins" ], + "browserSecurityHeaders" : { + "contentSecurityPolicyReportOnly" : "", + "xContentTypeOptions" : "nosniff", + "xRobotsTag" : "none", + "xFrameOptions" : "SAMEORIGIN", + "contentSecurityPolicy" : "frame-src 'self'; frame-ancestors 'self'; object-src 'none';", + "xXSSProtection" : "1; mode=block", + "strictTransportSecurity" : "max-age=31536000; includeSubDomains" + }, + "smtpServer" : { }, + "eventsEnabled" : false, + "eventsListeners" : [ "jboss-logging" ], + "enabledEventTypes" : [ "SEND_RESET_PASSWORD", "UPDATE_CONSENT_ERROR", "GRANT_CONSENT", "VERIFY_PROFILE_ERROR", "REMOVE_TOTP", "REVOKE_GRANT", "UPDATE_TOTP", "LOGIN_ERROR", "CLIENT_LOGIN", "RESET_PASSWORD_ERROR", "IMPERSONATE_ERROR", "CODE_TO_TOKEN_ERROR", "CUSTOM_REQUIRED_ACTION", "OAUTH2_DEVICE_CODE_TO_TOKEN_ERROR", "RESTART_AUTHENTICATION", "IMPERSONATE", "UPDATE_PROFILE_ERROR", "LOGIN", "OAUTH2_DEVICE_VERIFY_USER_CODE", "UPDATE_PASSWORD_ERROR", "CLIENT_INITIATED_ACCOUNT_LINKING", "TOKEN_EXCHANGE", "AUTHREQID_TO_TOKEN", "LOGOUT", "REGISTER", "DELETE_ACCOUNT_ERROR", "CLIENT_REGISTER", "IDENTITY_PROVIDER_LINK_ACCOUNT", "DELETE_ACCOUNT", "UPDATE_PASSWORD", "CLIENT_DELETE", "FEDERATED_IDENTITY_LINK_ERROR", "IDENTITY_PROVIDER_FIRST_LOGIN", "CLIENT_DELETE_ERROR", "VERIFY_EMAIL", "CLIENT_LOGIN_ERROR", "RESTART_AUTHENTICATION_ERROR", "EXECUTE_ACTIONS", "REMOVE_FEDERATED_IDENTITY_ERROR", "TOKEN_EXCHANGE_ERROR", "PERMISSION_TOKEN", "SEND_IDENTITY_PROVIDER_LINK_ERROR", "EXECUTE_ACTION_TOKEN_ERROR", "SEND_VERIFY_EMAIL", "OAUTH2_DEVICE_AUTH", "EXECUTE_ACTIONS_ERROR", "REMOVE_FEDERATED_IDENTITY", "OAUTH2_DEVICE_CODE_TO_TOKEN", "IDENTITY_PROVIDER_POST_LOGIN", "IDENTITY_PROVIDER_LINK_ACCOUNT_ERROR", "OAUTH2_DEVICE_VERIFY_USER_CODE_ERROR", "UPDATE_EMAIL", "REGISTER_ERROR", "REVOKE_GRANT_ERROR", "EXECUTE_ACTION_TOKEN", "LOGOUT_ERROR", "UPDATE_EMAIL_ERROR", "CLIENT_UPDATE_ERROR", "AUTHREQID_TO_TOKEN_ERROR", "UPDATE_PROFILE", "CLIENT_REGISTER_ERROR", "FEDERATED_IDENTITY_LINK", "SEND_IDENTITY_PROVIDER_LINK", "SEND_VERIFY_EMAIL_ERROR", "RESET_PASSWORD", "CLIENT_INITIATED_ACCOUNT_LINKING_ERROR", "OAUTH2_DEVICE_AUTH_ERROR", "UPDATE_CONSENT", "REMOVE_TOTP_ERROR", "VERIFY_EMAIL_ERROR", "SEND_RESET_PASSWORD_ERROR", "CLIENT_UPDATE", "CUSTOM_REQUIRED_ACTION_ERROR", "IDENTITY_PROVIDER_POST_LOGIN_ERROR", "UPDATE_TOTP_ERROR", "CODE_TO_TOKEN", "VERIFY_PROFILE", "GRANT_CONSENT_ERROR", "IDENTITY_PROVIDER_FIRST_LOGIN_ERROR" ], + "adminEventsEnabled" : false, + "adminEventsDetailsEnabled" : false, + "identityProviders" : [ ], + "identityProviderMappers" : [ ], + "components" : { + "org.keycloak.services.clientregistration.policy.ClientRegistrationPolicy" : [ { + "id" : "4d3f9f14-f5d2-4b0c-8ea7-e6d078aa2191", + "name" : "Max Clients Limit", + "providerId" : "max-clients", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "max-clients" : [ "200" ] + } + }, { + "id" : "f35bce67-1e75-408b-b065-52183368d4fd", + "name" : "Allowed Client Scopes", + "providerId" : "allowed-client-templates", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "allow-default-scopes" : [ "true" ] + } + }, { + "id" : "1849e52a-b8c9-44a8-af3d-ee19376a1ed1", + "name" : "Trusted Hosts", + "providerId" : "trusted-hosts", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "host-sending-registration-request-must-match" : [ "true" ], + "client-uris-must-match" : [ "true" ] + } + }, { + "id" : "f565cb47-3bcf-4078-8f94-eb4179c375b8", + "name" : "Full Scope Disabled", + "providerId" : "scope", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { } + }, { + "id" : "0efa669d-1017-4b4a-82e1-c2eaf72de2c9", + "name" : "Allowed Client Scopes", + "providerId" : "allowed-client-templates", + "subType" : "authenticated", + "subComponents" : { }, + "config" : { + "allow-default-scopes" : [ "true" ] + } + }, { + "id" : "528fb423-d66e-472e-9120-1f03ba9e0f18", + "name" : "Consent Required", + "providerId" : "consent-required", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { } + }, { + "id" : "104ec5a9-025b-4c44-8ac0-82d22887ca3e", + "name" : "Allowed Protocol Mapper Types", + "providerId" : "allowed-protocol-mappers", + "subType" : "authenticated", + "subComponents" : { }, + "config" : { + "allowed-protocol-mapper-types" : [ "oidc-address-mapper", "saml-user-property-mapper", "saml-role-list-mapper", "oidc-usermodel-property-mapper", "oidc-usermodel-attribute-mapper", "saml-user-attribute-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-full-name-mapper" ] + } + }, { + "id" : "3ab11d74-5e76-408a-b85a-26bf8950f979", + "name" : "Allowed Protocol Mapper Types", + "providerId" : "allowed-protocol-mappers", + "subType" : "anonymous", + "subComponents" : { }, + "config" : { + "allowed-protocol-mapper-types" : [ "oidc-full-name-mapper", "oidc-sha256-pairwise-sub-mapper", "oidc-usermodel-attribute-mapper", "saml-role-list-mapper", "oidc-address-mapper", "oidc-usermodel-property-mapper", "saml-user-property-mapper", "saml-user-attribute-mapper" ] + } + } ], + "org.keycloak.keys.KeyProvider" : [ { + "id" : "28ca0b6d-b2e2-4785-b04b-2391e6344e30", + "name" : "aes-generated", + "providerId" : "aes-generated", + "subComponents" : { }, + "config" : { + "kid" : [ "6dc4834f-a1de-4cfe-a29d-e84ac8e9b1a8" ], + "secret" : [ "HpuzG_jWYKwypLeoPEMC4A" ], + "priority" : [ "100" ] + } + }, { + "id" : "bd7945cf-6d35-4e03-9c3a-197f2dc76973", + "name" : "hmac-generated", + "providerId" : "hmac-generated", + "subComponents" : { }, + "config" : { + "kid" : [ "c8500166-5cc4-4085-ad0f-853c3b0b0233" ], + "secret" : [ "TI3xg__G2Qy8C47DracpYir2X4ItQZSrhgr5KSlwRNISDbBqZ-ky3OcAyokSXMcpweSOaCPvbivpvzJNklUBvw" ], + "priority" : [ "100" ], + "algorithm" : [ "HS256" ] + } + }, { + "id" : "2f53ccf3-37b0-4d34-83e7-ed497499ee51", + "name" : "rsa-enc-generated", + "providerId" : "rsa-enc-generated", + "subComponents" : { }, + "config" : { + "privateKey" : [ "MIIEowIBAAKCAQEA3b1tNLfcjFLUw9UShVDNf+ZD8sQqb4YBaIXcSJTX/zDQUPiCp176BBGI3s4VplDArnOW+LumozmKogeoHEnGEIDW8ovgK5uMU9tSA2p0qqGBUMOdR8YATTIfCJe7qGiiuGa3WZy3sQLM70SuRzx02YU8gvUcvl2Js4KyqAziOUX/w3Wa59H9jjGNUXYyqaPWJp73eHzbVYWySzyLG22mVlcUtBx5siL5T2/Xu0p9z4l7/bapwwmOVi1ZrcHjbEAwdGEiSMGI/uWqAF+r1BRpmJLR7HNXcL3eK4/56VYLaiwSejfyYeRFMITEn/UxGYhcXZ5xMUUCG0TxjBhLYpTBuwIDAQABAoIBAA4dwebcxkrH99Poa8+WkiE7JgaS9sahx9OBI2xwJANoIU2TpzGuNLQZ76uLgB+rPWZTD9Xm5a1iJjwOyQ9/937TzPCk91D0tpgcusRikb8jx/6TGB9acL4kBjYUVCCHr3BA2G75MKKGtJ2OMvAbCQSosZj+r2VDwYFEPUkV2jheE5JHSBkwyIRrus3JCwu8gu5fyCg9z8ljcxJxI5HIsi4v8Z21aCw/cLj7h5cMt44wCjQz4rOfYNBEFeHDtlfR1QtWKgjm4ZHHJbKrzf9b2kQXclziceEbSM0tYbROEXKi+s0Zc+z3HEG89vv0vfN400clmzzIAijKY6gg3pPRWdECgYEA+lnWYbSlXDMNYx6RBXm1RnlMUYIm4oy4/9ljgnoGJ6WCn3SjFkgaDtiKfGIG1BSB85r04pAPANgcWHf5tWDnq0ARvBVG0BX2bKd++7B3D4d3CRYKCwm88SslJXv9dfHVhq4+zViFPiUWwT20A72jCuUCvL88y5fh/YBecfdh+jECgYEA4r5RD0NB9dMaeg5/jk/GEHIo4Z9KLc6FrSoOFo2xFkPOy1sgDpDOiNtypuWvniO7k7Ose3DS3hlfTMsKzIW/CgQJ20+Y4cvBWDaOsRxfjj7w3d+jH5OSJdKKSzTrgLKc9ZhlRzVXy0J0hipIA6HG5kdVdLXmh85ITmf1CbJhE6sCgYBjPVeBNbXTHZ2x6/z62aslO5IoQVqetb/kE82hfDOSZcao5Ph9Lam+ttH2ynkAevykj4mBgi+gWwqpey2uW7KaLPSaxShj9kDQA3mP1fzsV/u0y1rB02Nlin/YIxVvOqU1FT9p8SwoXVVu1sHUNck62VtDbN9xqUx5S/ikXrclEQKBgQCoTssOwEcK+Vty9KYcdfy4onTUHZBLdjxl8Iyqkxy7QTQUYRznkvesQPDXEDGO+kk3dyx2KKZt9Hl4IFNww2quPZcvcuMx4DQxjbXXpA8OIIxcta95NepLJwA+mRai3nKCH1A2TlNP7pFeMa5o+8IPly3Ix2lKr4Wepa4PN5i1pwKBgCZ1QP6XAOERl9NznNmU0rXVcvYNP4PIIfQWfvGsldZ4QKkmjjAGiS0/oYqdWs+UDRZyCRChaVjDXO9fk0PEG5OGKAj9nyiYCT/M8xtJ3UeP5ffZZvJ/vnye3QdDIo1e38ZzsWwJHmLYw7fRqY9W5Vxo0Vsy22U3CJY70KTxVdTy" ], + "keyUse" : [ "ENC" ], + "certificate" : [ "MIICmzCCAYMCBgGG3GWycDANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZkYnJlcG8wHhcNMjMwMzEzMTkxMzE3WhcNMzMwMzEzMTkxNDU3WjARMQ8wDQYDVQQDDAZkYnJlcG8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDdvW00t9yMUtTD1RKFUM1/5kPyxCpvhgFohdxIlNf/MNBQ+IKnXvoEEYjezhWmUMCuc5b4u6ajOYqiB6gcScYQgNbyi+Arm4xT21IDanSqoYFQw51HxgBNMh8Il7uoaKK4ZrdZnLexAszvRK5HPHTZhTyC9Ry+XYmzgrKoDOI5Rf/DdZrn0f2OMY1RdjKpo9Ymnvd4fNtVhbJLPIsbbaZWVxS0HHmyIvlPb9e7Sn3PiXv9tqnDCY5WLVmtweNsQDB0YSJIwYj+5aoAX6vUFGmYktHsc1dwvd4rj/npVgtqLBJ6N/Jh5EUwhMSf9TEZiFxdnnExRQIbRPGMGEtilMG7AgMBAAEwDQYJKoZIhvcNAQELBQADggEBAK3kQ1VkQrzvSWvmXmazmNoA1ZiPzRDs1XhGUWxgsxzgPylr3dGBuqQbKvgnLUBQLSqlJHpI4fZflHswu1qrvVZYtekPcGef4WhcKAu2i1RwxrKa6RJQ1tRbrLuVYCzPv5p/DWgltWVn88aoLnqQn0SK/0PB/o4a4Cm7Kq2ZzCr1dACBr06LvOHsc7249OySmbG4HH+pLK6jVURhZ9VaObqAHe2FJBVVoIzURbdiRRURqumrIvbnpeaU1aFyg6ED5wTnXvmMPmVPt9F79mcB33bASO5wyu00X8t1hyN2Show2l2vxLACGUzVkTQt15s7uDLKE7qLmKSR3EuSGXWv3wA=" ], + "priority" : [ "100" ], + "algorithm" : [ "RSA-OAEP" ] + } + }, { + "id" : "2293ff99-3c6d-46d1-8635-5e679d5b134a", + "name" : "rsa-generated", + "providerId" : "rsa-generated", + "subComponents" : { }, + "config" : { + "privateKey" : [ "MIIEpAIBAAKCAQEAqqnHQ2BWWW9vDNLRCcxD++xZg/16oqMo/c1l+lcFEjjAIJjJp/HqrPYU/U9GvquGE6PbVFtTzW1KcKawOW+FJNOA3CGo8Q1TFEfz43B8rZpKsFbJKvQGVv1Z4HaKPvLUm7iMm8Hv91cLduuoWx6Q3DPe2vg13GKKEZe7UFghF+0T9u8EKzA/XqQ0OiICmsmYPbwvf9N3bCKsB/Y10EYmZRb8IhCoV9mmO5TxgWgiuNeCTtNCv2ePYqL/U0WvyGFW0reasIK8eg3KrAUj8DpyOgPOVBn3lBGf+3KFSYi+0bwZbJZWqbC/Xlk20Go1YfeJPRIt7ImxD27R/lNjgDO/MwIDAQABAoIBADNcMt6hAHub4JTAYS6Mra0EPRBO2XhWmACBrv3+8ETClXd5475KPLDewgRVtlmtbwU8G8awUXESQgPS9lfiqvQhPreA3cHlm6oP2WMKOEtakr2s8I+frsTBLCo0Ini9RaSzjoVVgS0zofyhASKi+T970MafSj5P3XNb8YBFdXgoYDiA7FXLH6a/+m7LScL+wGcFMAAeYESxZbMQLfH3v8L+4EcTraiwjLG17ZdlF3dpybMyUSse6ZQ/PdlyvBuzzLXhN6Ce2gd9ATfS+YWTzo7Yf+GU+ex5bIpVOfHqtuM/hyq7YGKENClsXwNZIAoFnvGCbvECAfgyapVrD30IfykCgYEA0rgsSZ82pxT40NxwgBD1g9lbNVBKXphRB/3S078qusUzJjT7AldEj4imGPhAbI7bI8gAeWJsp1XJWkjM8ktaVrh+NQl7p8e9OPh0pQF/5Bdg8ajbjXESpjnaU66pVYRQy/d+jNli/YRAHX5RUfsBl+6W4+WSVMGmKBiqJsur+ecCgYEAz1YVXClcmUnyZem5B+2E9noIzjF6ROE+jIb6rawM85P3Xd0lXtECQavtxw+Qk7I32qOwrxl1UpK2foVel3pazi+4OpMfmqtYGenRP1Zk1cZwrDo0cIemTDGjj3kJ8tYn12CGolFQpJZgK6OHzvG0tOxI5VZgjIViWNPe1PGWXtUCgYEAxXGNDe8BZs1f11S2lUlOw5yGug3hoYFXbAWJ5p7Ziuf8ZXB/QlJDC7se54a11wKEk6Jzz0lKRgE8CjzszJuOqnN0zn10QGIIC7nCklo1W6QMUmPGVWH994N976tZP6gbjQL6sT+AYcvpx7j0ubxYYeRNvnz+ACzzY964kGGHY0ECgYEAumlwPPNnMN7+VEjGNm2D7UMdJZ3wi3tkjF5ThdA5uMohTsAk+FG80KSu3RmOaGyEsUwY7+VYyYvlDm4E9PZqLBVVczyR3rMNPAcwPd0EPfvzk7WlLkOX7ct3fehaXH3VRlyfz9KCSeh1wOZ/lT1VtpD2nVOC7PSDzs92+kfXZZ0CgYAnrD1y4skgXkdwolZ3unn3EFyGm2d+X5aMTHwQPdWxqoNIAl/9wdghlzihwnPhhsxq1WzlxuC3V2IMrNPtRx70Mi+FbSmR5m4Xx5RptgMtMlwno+L40PzNJgMjHGjt0wcx3Vel8wuohDtnqMyS7P5nG1/TQx0Cyzwn7QOXlNpgbQ==" ], + "keyUse" : [ "SIG" ], + "certificate" : [ "MIICmzCCAYMCBgGG3GWyBTANBgkqhkiG9w0BAQsFADARMQ8wDQYDVQQDDAZkYnJlcG8wHhcNMjMwMzEzMTkxMzE3WhcNMzMwMzEzMTkxNDU3WjARMQ8wDQYDVQQDDAZkYnJlcG8wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqqcdDYFZZb28M0tEJzEP77FmD/Xqioyj9zWX6VwUSOMAgmMmn8eqs9hT9T0a+q4YTo9tUW1PNbUpwprA5b4Uk04DcIajxDVMUR/PjcHytmkqwVskq9AZW/Vngdoo+8tSbuIybwe/3Vwt266hbHpDcM97a+DXcYooRl7tQWCEX7RP27wQrMD9epDQ6IgKayZg9vC9/03dsIqwH9jXQRiZlFvwiEKhX2aY7lPGBaCK414JO00K/Z49iov9TRa/IYVbSt5qwgrx6DcqsBSPwOnI6A85UGfeUEZ/7coVJiL7RvBlsllapsL9eWTbQajVh94k9Ei3sibEPbtH+U2OAM78zAgMBAAEwDQYJKoZIhvcNAQELBQADggEBAASnN1Cuif1sdfEK2kWAURSXGJCohCROLWdKFjaeHPRaEfpbFJsgxW0Yj3nwX5O3bUlOWoTyENwnXSsXMQsqnNi+At32CKaKO8+AkhAbgQL9F0B+KeJwmYv3cUj5N/LYkJjBvZBzUZ4Ugu5dcxH0k7AktLAIwimkyEnxTNolOA3UyrGGpREr8MCKWVr10RFuOpF/0CsJNNwbHXzalO9D756EUcRWZ9VSg6QVNso0YYRKTnILWDn9hcTRnqGy3SHo3anFTqQZ+BB57YbgFWy6udC0LYRB3zdp6zNti87eu/VEymiDY/mmo1AB8Tm0b6vxFz4AKcL3ax5qS6YnZ9efSzk=" ], + "priority" : [ "100" ] + } + } ] + }, + "internationalizationEnabled" : false, + "supportedLocales" : [ ], + "authenticationFlows" : [ { + "id" : "88e5d526-2298-413c-a904-133ad839d47f", + "alias" : "Account verification options", + "description" : "Method with which to verity the existing account", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "idp-email-verification", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "Verify Existing Account by Re-authentication", + "userSetupAllowed" : false + } ] + }, { + "id" : "bc0b483f-4a3f-4c15-bf65-b26f5320e6c9", + "alias" : "Authentication Options", + "description" : "Authentication options.", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "basic-auth", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "basic-auth-otp", + "authenticatorFlow" : false, + "requirement" : "DISABLED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "auth-spnego", + "authenticatorFlow" : false, + "requirement" : "DISABLED", + "priority" : 30, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "a690c715-fbae-4c20-b680-bd4010718761", + "alias" : "Browser - Conditional OTP", + "description" : "Flow to determine if the OTP is required for the authentication", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "auth-otp-form", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "ad6d407e-c73e-4439-baf3-d7c99c6cb6ad", + "alias" : "Direct Grant - Conditional OTP", + "description" : "Flow to determine if the OTP is required for the authentication", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "direct-grant-validate-otp", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "e5d03405-e10a-408a-adb2-41dbb4f24515", + "alias" : "First broker login - Conditional OTP", + "description" : "Flow to determine if the OTP is required for the authentication", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "auth-otp-form", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "96b93843-62d0-44f1-84dd-21cc5f95f523", + "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", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "Account verification options", + "userSetupAllowed" : false + } ] + }, { + "id" : "088f4051-36ab-4952-a4f2-4ba53c408083", + "alias" : "Reset - Conditional OTP", + "description" : "Flow to determine if the OTP should be reset or not. Set to REQUIRED to force.", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "conditional-user-configured", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "reset-otp", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "05f37bb2-779d-4e3f-ad1b-f6eb33bb3de4", + "alias" : "User creation or linking", + "description" : "Flow for the existing/non-existing user alternatives", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticatorConfig" : "create unique user config", + "authenticator" : "idp-create-user-if-unique", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "Handle Existing Account", + "userSetupAllowed" : false + } ] + }, { + "id" : "300a5647-7d2c-4348-9f1f-51504bfda1c4", + "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", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "CONDITIONAL", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "First broker login - Conditional OTP", + "userSetupAllowed" : false + } ] + }, { + "id" : "26afc672-314b-4ad9-9711-7aaeafd7c00c", + "alias" : "browser", + "description" : "browser based authentication", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "auth-cookie", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "auth-spnego", + "authenticatorFlow" : false, + "requirement" : "DISABLED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "identity-provider-redirector", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 25, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "ALTERNATIVE", + "priority" : 30, + "autheticatorFlow" : true, + "flowAlias" : "forms", + "userSetupAllowed" : false + } ] + }, { + "id" : "9b301f6c-eda7-4da0-ba09-1a6454ff910d", + "alias" : "clients", + "description" : "Base authentication for clients", + "providerId" : "client-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "client-secret", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "client-jwt", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "client-secret-jwt", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 30, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "client-x509", + "authenticatorFlow" : false, + "requirement" : "ALTERNATIVE", + "priority" : 40, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "6e54f1be-dbad-4b6d-8eee-8e048d413c63", + "alias" : "direct grant", + "description" : "OpenID Connect Resource Owner Grant", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "direct-grant-validate-username", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "direct-grant-validate-password", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "CONDITIONAL", + "priority" : 30, + "autheticatorFlow" : true, + "flowAlias" : "Direct Grant - Conditional OTP", + "userSetupAllowed" : false + } ] + }, { + "id" : "31da4b94-03c4-4d79-9ac3-5df1445c0781", + "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", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "2e16651d-681f-4d9b-9dd4-9acdb465cd43", + "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", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "User creation or linking", + "userSetupAllowed" : false + } ] + }, { + "id" : "da109a26-fefa-48a4-ae8e-1d49627c2db8", + "alias" : "forms", + "description" : "Username, password, otp and other auth forms.", + "providerId" : "basic-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "auth-username-password-form", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "CONDITIONAL", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "Browser - Conditional OTP", + "userSetupAllowed" : false + } ] + }, { + "id" : "b8f1f963-6813-4875-bae8-ce48a813763b", + "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", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : true, + "flowAlias" : "Authentication Options", + "userSetupAllowed" : false + } ] + }, { + "id" : "4c983c77-241f-41c5-8b8a-e2cd6fc08914", + "alias" : "registration", + "description" : "registration flow", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "registration-page-form", + "authenticatorFlow" : true, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : true, + "flowAlias" : "registration form", + "userSetupAllowed" : false + } ] + }, { + "id" : "d62c8dd6-633c-408a-aa99-43071510efb4", + "alias" : "registration form", + "description" : "registration form", + "providerId" : "form-flow", + "topLevel" : false, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "registration-user-creation", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "registration-profile-action", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 40, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "registration-password-action", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 50, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "registration-recaptcha-action", + "authenticatorFlow" : false, + "requirement" : "DISABLED", + "priority" : 60, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + }, { + "id" : "c8ca5be7-e76d-4e16-b5ca-3ced99d92dbb", + "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", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "reset-credential-email", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 20, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticator" : "reset-password", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 30, + "autheticatorFlow" : false, + "userSetupAllowed" : false + }, { + "authenticatorFlow" : true, + "requirement" : "CONDITIONAL", + "priority" : 40, + "autheticatorFlow" : true, + "flowAlias" : "Reset - Conditional OTP", + "userSetupAllowed" : false + } ] + }, { + "id" : "389c1c37-e8af-4610-a507-e1257f55b954", + "alias" : "saml ecp", + "description" : "SAML ECP Profile Authentication Flow", + "providerId" : "basic-flow", + "topLevel" : true, + "builtIn" : true, + "authenticationExecutions" : [ { + "authenticator" : "http-basic-authenticator", + "authenticatorFlow" : false, + "requirement" : "REQUIRED", + "priority" : 10, + "autheticatorFlow" : false, + "userSetupAllowed" : false + } ] + } ], + "authenticatorConfig" : [ { + "id" : "d66ca9d0-1645-4c84-abfe-c0a696f17de4", + "alias" : "create unique user config", + "config" : { + "require.password.update.after.registration" : "false" + } + }, { + "id" : "061cc6b8-90be-4423-9bf9-974ead709b5d", + "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" : false, + "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" : false, + "defaultAction" : false, + "priority" : 50, + "config" : { } + }, { + "alias" : "delete_account", + "name" : "Delete Account", + "providerId" : "delete_account", + "enabled" : false, + "defaultAction" : false, + "priority" : 60, + "config" : { } + }, { + "alias" : "webauthn-register", + "name" : "Webauthn Register", + "providerId" : "webauthn-register", + "enabled" : true, + "defaultAction" : false, + "priority" : 70, + "config" : { } + }, { + "alias" : "webauthn-register-passwordless", + "name" : "Webauthn Register Passwordless", + "providerId" : "webauthn-register-passwordless", + "enabled" : true, + "defaultAction" : false, + "priority" : 80, + "config" : { } + }, { + "alias" : "update_user_locale", + "name" : "Update User Locale", + "providerId" : "update_user_locale", + "enabled" : true, + "defaultAction" : false, + "priority" : 1000, + "config" : { } + } ], + "browserFlow" : "browser", + "registrationFlow" : "registration", + "directGrantFlow" : "direct grant", + "resetCredentialsFlow" : "reset credentials", + "clientAuthenticationFlow" : "clients", + "dockerAuthenticationFlow" : "docker auth", + "attributes" : { + "cibaBackchannelTokenDeliveryMode" : "poll", + "cibaAuthRequestedUserHint" : "login_hint", + "clientOfflineSessionMaxLifespan" : "0", + "oauth2DevicePollingInterval" : "5", + "clientSessionIdleTimeout" : "0", + "actionTokenGeneratedByUserLifespan-execute-actions" : "", + "actionTokenGeneratedByUserLifespan-verify-email" : "", + "clientOfflineSessionIdleTimeout" : "0", + "actionTokenGeneratedByUserLifespan-reset-credentials" : "", + "cibaInterval" : "5", + "realmReusableOtpCode" : "false", + "cibaExpiresIn" : "120", + "oauth2DeviceCodeLifespan" : "600", + "actionTokenGeneratedByUserLifespan-idp-verify-account-via-email" : "", + "parRequestUriLifespan" : "60", + "clientSessionMaxLifespan" : "0", + "shortVerificationUri" : "" + }, + "keycloakVersion" : "21.0.2", + "userManagedAccessAllowed" : false, + "clientProfiles" : { + "profiles" : [ ] + }, + "clientPolicies" : { + "policies" : [ ] + } +} \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index c09ab11a82..8462f0639f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -327,7 +327,6 @@ services: image: docker.io/nginx:1.27.0-alpine3.19-slim ports: - "80:80" - - "443:443" volumes: - ./dbrepo-gateway-service/dbrepo.conf:/etc/nginx/conf.d/default.conf depends_on: @@ -483,10 +482,13 @@ services: container_name: dbrepo-upload-service hostname: upload-service image: docker.io/tusproject/tusd:v2.4.0 + volumes: + - "./dbrepo-upload-service/pre-create.sh:/srv/tusd-hooks/pre-create:ro" command: - "-behind-proxy" - "-max-size=2000000000" - "-base-path=/api/upload/files/" + - "-hooks-dir=/srv/tusd-hooks/" - "-s3-endpoint=${STORAGE_ENDPOINT:-http://storage-service:9000}" - "-s3-bucket=dbrepo" environment: diff --git a/helm/dbrepo/Chart.yaml b/helm/dbrepo/Chart.yaml index d837f1148f..29488f7214 100644 --- a/helm/dbrepo/Chart.yaml +++ b/helm/dbrepo/Chart.yaml @@ -6,8 +6,8 @@ description: Helm Chart for installing DBRepo sources: - https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services type: application -version: "1.5.1" -appVersion: "1.5.1" +version: "1.5.2" +appVersion: "1.5.2" keywords: - dbrepo maintainers: diff --git a/helm/dbrepo/README.md b/helm/dbrepo/README.md index 44abf5b9c9..0452c93f8e 100644 --- a/helm/dbrepo/README.md +++ b/helm/dbrepo/README.md @@ -11,7 +11,7 @@ sample [ for your deployment and update the variables, especially `hostname`. ```bash -helm install my-release "oci://registry.datalab.tuwien.ac.at/dbrepo/helm/dbrepo" --values ./values.yaml --version "1.5.1" +helm install my-release "oci://registry.datalab.tuwien.ac.at/dbrepo/helm/dbrepo" --values ./values.yaml --version "1.5.2" ``` ## Prerequisites @@ -28,7 +28,7 @@ helm install my-release "oci://registry.datalab.tuwien.ac.at/dbrepo/helm/dbrepo" To install the chart with the release name `my-release`: ```bash -helm install my-release "oci://oci://registry.datalab.tuwien.ac.at/dbrepo/helm" --values ./values.yaml --version "1.5.1" +helm install my-release "oci://oci://registry.datalab.tuwien.ac.at/dbrepo/helm" --values ./values.yaml --version "1.5.2" ``` The command deploys DBRepo on the Kubernetes cluster in the default configuration. The Parameters section lists the diff --git a/helm/dbrepo/templates/metadata-secret.yaml b/helm/dbrepo/templates/metadata-secret.yaml index 684adf0269..6807fae861 100644 --- a/helm/dbrepo/templates/metadata-secret.yaml +++ b/helm/dbrepo/templates/metadata-secret.yaml @@ -44,8 +44,8 @@ stringData: SPARQL_CONNECTION_TIMEOUT: "{{ .Values.metadataservice.sparql.connectionTimeout }}" SPRING_PROFILES_ACTIVE: "{{ ternary "doi" "" .Values.metadataservice.datacite.enabled }}" S3_ENDPOINT: "{{ .Values.metadataservice.s3.endpoint }}" - S3_ACCESS_KEY_ID: "{{ .Values.metadataservice.s3.auth.username }}" + S3_ACCESS_KEY_ID: "{{ .Values.storageservice.s3.auth.adminAccessKeyId }}" S3_BUCKET: "{{ .Values.metadataservice.s3.bucket }}" - S3_SECRET_ACCESS_KEY: "{{ .Values.metadataservice.s3.auth.password }}" + S3_SECRET_ACCESS_KEY: "{{ .Values.storageservice.s3.auth.adminSecretAccessKey }}" SYSTEM_USERNAME: "{{ .Values.identityservice.users }}" SYSTEM_PASSWORD: "{{ .Values.identityservice.userPasswords }}" diff --git a/helm/dbrepo/templates/upload-configmap.yaml b/helm/dbrepo/templates/upload-configmap.yaml new file mode 100644 index 0000000000..3dbde251a8 --- /dev/null +++ b/helm/dbrepo/templates/upload-configmap.yaml @@ -0,0 +1,54 @@ +{{- if .Values.uploadservice.enabled }} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: upload-service-setup + namespace: {{ include "common.names.namespace" . | quote }} +data: + pre-create: | + #!/bin/bash + REQUEST_RAW=$(cat /dev/stdin) + + echo "[DEBUG] [pre-create hook] request started" >&2 + if [ "$(echo "$REQUEST_RAW" | jq '.HTTPRequest.Header | has("Authorization")')" == "false" ]; then + echo "[ERROR] [pre-create hook] Missing header 'Authorization'" >&2 + echo "[DEBUG] [pre-create hook] raw request: ${REQUEST_RAW}" >&2 + cat <<END + { + "RejectUpload": true, + "HTTPResponse": { + "StatusCode": 400, + "Header": { + "Content-Type": "application/json" + }, + "Body": "{\"code\":\"error.upload.malformed\",\"message\":\"Missing header 'Authorization'\",\"status\":\"BAD_REQUEST\"}" + } + } + END + exit 1 + fi + + echo "[DEBUG] [pre-create hook] request has 'Authorization' header present" >&2 + + BEARER="$(echo "$REQUEST_RAW" | jq -r '.HTTPRequest.Header.Authorization[0]')" + echo "[DEBUG] [pre-create hook] attempting to contact {{ .Values.authservice.endpoint }}" >&2 + if [ ! "$(wget -O- --quiet --header "Authorization: ${BEARER}" {{ .Values.authservice.endpoint }}/realms/dbrepo/protocol/openid-connect/userinfo)" ]; then + echo "[ERROR] [pre-create hook] Unauthorized" >&2 + cat <<END + { + "RejectUpload": true, + "HTTPResponse": { + "StatusCode": 401, + "Header": { + "Content-Type": "application/json" + }, + "Body": "{\"code\":\"error.upload.unauthorized\",\"message\":\"Authentication required\",\"status\":\"UNAUTHORIZED\"}" + } + } + END + exit 1 + fi + + echo "[INFO] [pre-create hook] Authorized" >&2 +{{- end }} diff --git a/helm/dbrepo/values.yaml b/helm/dbrepo/values.yaml index 9ba172ec34..8b6459ba8a 100644 --- a/helm/dbrepo/values.yaml +++ b/helm/dbrepo/values.yaml @@ -201,12 +201,24 @@ uploadservice: - "-behind-proxy" - "-max-size=2000000000" - "-base-path=/api/upload/files/" + - "-hooks-dir=/srv/tusd-hooks/" - "-s3-endpoint=http://storage-service-s3:8333" - "-s3-bucket=dbrepo" ## @skip uploadservice.envFrom envFrom: - secretRef: name: upload-service-secret + ## @skip uploadservice.volumes + volumes: + - name: config + configMap: + name: upload-service-setup + defaultMode: 0777 + ## @skip uploadservice.volumeMounts + volumeMounts: + - name: config + mountPath: /srv/tusd-hooks/pre-create + subPath: pre-create ## @param uploadservice.replicaCount The number of replicas. replicaCount: 2 @@ -296,7 +308,7 @@ analyseservice: enabled: true image: ## @skip analyseservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.5.1 + name: registry.datalab.tuwien.ac.at/dbrepo/analyse-service:1.5.2 ## @skip analyseservice.image.pullPolicy pullPolicy: Always ## @param analyseservice.image.debug Set the logging level to `trace`. Otherwise, set to `info`. @@ -360,7 +372,7 @@ metadataservice: enabled: true image: ## @skip metadataservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.5.1 + name: registry.datalab.tuwien.ac.at/dbrepo/metadata-service:1.5.2 ## @skip metadataservice.image.pullPolicy pullPolicy: Always ## @param metadataservice.image.debug Set the logging level to `trace`. Otherwise, set to `info`. @@ -459,7 +471,7 @@ dataservice: endpoint: http://data-service image: ## @skip dataservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.5.1 + name: registry.datalab.tuwien.ac.at/dbrepo/data-service:1.5.2 ## @skip dataservice.image.pullPolicy pullPolicy: Always ## @param dataservice.image.debug Set the logging level to `trace`. Otherwise, set to `info`. @@ -539,7 +551,7 @@ searchservice: endpoint: http://search-service image: ## @skip searchservice.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.5.1 + name: registry.datalab.tuwien.ac.at/dbrepo/search-service:1.5.2 ## @skip searchservice.image.pullPolicy pullPolicy: Always ## @param searchservice.image.debug Set the logging level to `trace`. Otherwise, set to `info`. @@ -588,7 +600,7 @@ searchservice: ## @skip searchservice.init init: image: - name: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.5.1 + name: registry.datalab.tuwien.ac.at/dbrepo/search-service-init:1.5.2 pullPolicy: Always ## @param searchservice.replicaCount The number of replicas. replicaCount: 2 @@ -636,7 +648,7 @@ storageservice: adminSecretAccessKey: seaweedfsadmin ## @skip storageservice.init init: - image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.5.1 + image: registry.datalab.tuwien.ac.at/dbrepo/storage-service-init:1.5.2 pullPolicy: Always ## @section Identity Service @@ -702,7 +714,7 @@ ui: enabled: true image: ## @skip ui.image.name - name: registry.datalab.tuwien.ac.at/dbrepo/ui:1.5.1 + name: registry.datalab.tuwien.ac.at/dbrepo/ui:1.5.2 ## @skip ui.image.pullPolicy pullPolicy: Always ## @param ui.image.debug Set the logging level to `trace`. Otherwise, set to `info`. diff --git a/install.sh b/install.sh index 74206b9e02..12a20e9868 100644 --- a/install.sh +++ b/install.sh @@ -1,7 +1,7 @@ #!/bin/bash # preset -VERSION="1.5.1" +VERSION="1.5.2" MIN_CPU=8 MIN_RAM=4 MIN_MAP_COUNT=262144 @@ -43,12 +43,18 @@ if [[ $SKIP_CHECKS -eq 0 ]] && [[ $DOWNLOAD_ONLY -ne 1 ]]; then fi MAX_MAP_COUNT=$(cat /proc/sys/vm/max_map_count) if [[ $MAX_MAP_COUNT -lt $MIN_MAP_COUNT ]]; then - echo "You do not have enough max. map counts:" - echo "" - echo " - we found max. ${MAX_MAP_COUNT} map count instead of necessary ${MIN_MAP_COUNT}" - echo " - update your /etc/sysctl.conf file and add the line 'vm.max_map_count=${MIN_MAP_COUNT}' at the end and apply it with 'sysctl -p'" - echo " - if you believe this is a mistake, skip startup checks with the SKIP_CHECKS=1 flag" - exit 4 + echo "You do not have enough max. map counts: found ${MAX_MAP_COUNT} instead of minimum ${MIN_MAP_COUNT}" + if [ $(id -u) -eq 0 ]; then + echo " - attempt to update the /etc/sysctl.conf file and add the line 'vm.max_map_count=${MIN_MAP_COUNT}' at the end" + echo "vm.max_map_count=${MIN_MAP_COUNT}" >> /etc/sysctl.conf + sysctl -p + if [[ $MAX_MAP_COUNT -lt $MIN_MAP_COUNT ]]; then + exit 4 + fi + else + echo " - you need to re-run the install.sh script as root to fix this" + exit 4 + fi else echo "MAP COUNT ${MAX_MAP_COUNT} OK" fi diff --git a/lib/python/pyproject.toml b/lib/python/pyproject.toml index aa93d2b8c1..e032c5edfe 100644 --- a/lib/python/pyproject.toml +++ b/lib/python/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "dbrepo" -version = "1.5.1" +version = "1.5.2" description = "DBRepo Python Library" keywords = [ "DBRepo", @@ -34,7 +34,7 @@ requires = [ build-backend = "setuptools.build_meta" [project.urls] -Homepage = "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5./" +Homepage = "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/" Documentation = "https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/python/" Issues = "https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/-/issues" Source = "https://gitlab.phaidra.org/fair-data-austria-db-repository/fda-services/" \ No newline at end of file diff --git a/lib/python/setup.py b/lib/python/setup.py index 2f9386d289..50be6c428a 100644 --- a/lib/python/setup.py +++ b/lib/python/setup.py @@ -2,7 +2,7 @@ from distutils.core import setup setup(name="dbrepo", - version="1.5.1", + version="1.5.2", description="A library for communicating with DBRepo", url="https://www.ifs.tuwien.ac.at/infrastructures/dbrepo/1.5/", author="Martin Weise", diff --git a/make/dev.mk b/make/dev.mk index ce7b88e7de..1d9b179df8 100644 --- a/make/dev.mk +++ b/make/dev.mk @@ -30,4 +30,5 @@ package-config: ## Package the config files cp ./dbrepo-gateway-service/dbrepo.conf ./.docker/config cp ./dbrepo-metric-db/prometheus.yml ./.docker/config cp ./dbrepo-storage-service/s3_config.json ./.docker/config + cp ./dbrepo-upload-service/pre-create.sh ./.docker/config cd ./.docker && tar czf ./dist.tar.gz ./docker-compose.yml ./.env ./config diff --git a/make/test.mk b/make/test.mk index 36d44d42f5..666ab576c5 100644 --- a/make/test.mk +++ b/make/test.mk @@ -23,3 +23,7 @@ test-lib: ## Test the Python Library. .PHONY: test-ui test-ui: ## Test the UI. bash ./dbrepo-ui/test/test_heap.sh + +.PHONY: test-upload-service +test-upload-service: ## Test the Upload Service + mvn -f ./dbrepo-upload-service/pom.xml clean test \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties index 0d048c0f3c..54228d8d4c 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,7 +2,7 @@ sonar.projectKey=fair-data-austria-db-repository_fda-services_a57fa043-ab99-4cdd-a721-162d9a916d77 sonar.host.url=https://s39.datalab.tuwien.ac.at # project -sonar.projectVersion=1.5.1 +sonar.projectVersion=1.5.2 # general sonar.qualitygate.wait=true sonar.projectCreation.mainBranchName=master -- GitLab