Skip to content

Release/2.14.6#465

Open
mehmet-yoti wants to merge 112 commits into
masterfrom
release/2.14.6
Open

Release/2.14.6#465
mehmet-yoti wants to merge 112 commits into
masterfrom
release/2.14.6

Conversation

@mehmet-yoti

@mehmet-yoti mehmet-yoti commented Jun 11, 2026

Copy link
Copy Markdown
Contributor

Release 2.14.6 — What's New

New Features

SDK-2758 — Share Code Resources & Tasks (#462)

Adds support for parsing and retrieving share code resources and verify share code tasks from IDV session responses.

  • New ShareCodeResourceResponse class exposing source, media, profile and task data
  • New ShareCodeMediaResponse and VerifyShareCodeTaskResponse classes
  • ResourceContainer.share_codes property for list access
  • VERIFY_SHARE_CODE_TASK constant added to constants.py

SDK-2781 — capture_type on Static Liveness Resources (#460)

StaticLivenessResourceResponse now exposes a capture_type property (e.g. "PHOTOGRAPH"). Defaults to None when the field is absent.


SDK-2792 — extraction_image_ids on IDV Page Responses (#461, #452)

PageResponse now exposes an extraction_image_ids property — the list of media IDs used for automated extraction. Defaults to an empty list when the field is absent or null.


SDK-2743 — process on Breakdown Response (#453)

BreakdownResponse now exposes a process property indicating the breakdown process type (AUTOMATED / EXPERT_REVIEW). Defaults to None when absent.


SDK-2473 — brand_id in Session Config (#458)

SdkConfigBuilder.with_brand_id(brand_id) allows a brand identifier to be set on the IDV session config for iframe theming. The field is omitted from the JSON payload when not set.


SDK-2614 — Suppressed Screens (IDV Shortened Flow) (#459)

SdkConfigBuilder.with_suppressed_screens([...]) / with_suppressed_screen(...) allow specific screens to be omitted from the IDV journey. Seven new constants added: ID_DOCUMENT_EDUCATION, ID_DOCUMENT_REQUIREMENTS, SUPPLEMENTARY_DOCUMENT_EDUCATION, ZOOM_LIVENESS_EDUCATION, STATIC_LIVENESS_EDUCATION, FACE_CAPTURE_EDUCATION, FLOW_COMPLETION.


Security & Dependency Upgrades

SDK-2803 — CVE Remediation (#463)

Core SDK (install_requires)

Package Before After Reason
cryptography >=42.0.0 >=44.0.1 CVE-2024-12797
protobuf >=4.21.12 >=4.25.8,<6 CVE-2025-4565, CVE-2026-0994
requests >=2.31.0 >=2.32.4 CVE-2024-47081
urllib3 >=2.2.1 >=2.6.3 Decompression / redirect CVEs
pyopenssl >=24.0.0 >=26.0.0 High severity CVEs

All 10 *_pb2.py files regenerated using the _builder API required by protobuf 4.x/5.x runtimes.

Example apps

App Key changes
Django 4.0.1 → 4.2 LTS (critical SQLi CVEs closed)
Flask 1.x → 3.0.6 (CVE-2023-30861)
Werkzeug 1.x → 3.0.6 (request smuggling, debugger RCE, path traversal)
Jinja2 → 3.1.6 (5 CVEs)

QA Test Plan

Setup

Install the SDK from this release branch into the IDV example project:

pip install git+https://github.com/getyoti/yoti-python-sdk.git@release/2.14.6

SDK-2473 — brand_id in Session Config

When creating a session, call .with_brand_id("<your-brand-id>") on the SdkConfigBuilder:

sdk_config = SdkConfigBuilder().with_brand_id("<your-brand-id>").build()

Go through the IDV flow and on the iframe, you should see the branding associated with the given brand_id applied (colours, logo, etc.).

Create a second session without .with_brand_id(...). The default Yoti branding should appear and brand_id should be absent from the session creation request payload.


SDK-2614 — Suppressed Screens (IDV Shortened Flow)

When creating a session, call .with_suppressed_screen(...) on the SdkConfigBuilder for the screens you want to omit:

from yoti_python_sdk.doc_scan import constants

sdk_config = (SdkConfigBuilder()
              .with_suppressed_screen(constants.ID_DOCUMENT_EDUCATION)
              .with_suppressed_screen(constants.FLOW_COMPLETION)
              .build())

Go through the IDV flow — the education screen before document capture and the flow completion screen should not appear. The user should move directly to the next step after each suppressed screen would normally have been shown.

Create a second session without any suppressed screens and confirm all screens appear as normal.


SDK-2473 + SDK-2614 — Combined config

When creating a session, set both brand_id and suppressed_screens together:

sdk_config = (SdkConfigBuilder()
              .with_brand_id("<your-brand-id>")
              .with_suppressed_screen(constants.FLOW_COMPLETION)
              .build())

Go through the IDV flow — you should see the brand theming applied and the flow completion screen should not appear.


SDK-2758 — Share Code Resources & Tasks

Create a session that returns share code resources. After completing the flow and landing on the success page, inspect session_result.resources.share_codes. On the success page you should see:

  • A list of share code entries, each with source, lookup_profile, returned_profile, and associated media fields populated where available
  • Each share code entry's verify_share_code_tasks should list the corresponding tasks with their state (e.g. DONE) and any generated_media

For a session that produces no share codes, session_result.resources.share_codes should be an empty list.


SDK-2781 — capture_type on Static Liveness Resources

Create a session that includes a Static Liveness check. After completing the flow and landing on the success page, inspect session_result.resources.static_liveness_resources. On the success page you should see:

  • Each static liveness resource has a capture_type field populated (e.g. "PHOTOGRAPH")
  • For an incomplete or skipped static liveness step the field should be None

SDK-2792 — extraction_image_ids on IDV Page Responses

Create a session that includes an ID document upload with automated extraction. After completing the flow and landing on the success page, inspect the pages on each document via session_result.resources.id_documents. On the success page you should see:

  • Each page that underwent automated extraction has extraction_image_ids populated with one or more UUID strings corresponding to the media used
  • Pages without automated extraction should return an empty list for extraction_image_ids

SDK-2743 — process on Breakdown Response

Create a session that includes document authenticity or text data checks. After completing the flow and landing on the success page, inspect the breakdown items on each check via session_result.checks. On the success page you should see:

  • Each breakdown item has a process field indicating how it was processed — "AUTOMATED" for machine-processed checks or "EXPERT_REVIEW" for manually reviewed ones
  • Breakdown items that do not carry this field should show None

SDK-2803 — Dependency upgrade verification

Install the example app dependencies and start the app:

cd examples/doc_scan && pip install -r requirements.txt && python app.py

The app should start without errors. Run pip-audit against requirements.txt and confirm no High or Critical CVEs remain for the packages listed in the upgrade table above.

davidgrayston and others added 30 commits November 16, 2020 16:21
Merge master 1.14.0 → development
NA: Update dependabot reviewers
Bumps [cffi](https://github.com/python-cffi/release-doc) from 1.14.3 to 1.14.4.
- [Release notes](https://github.com/python-cffi/release-doc/releases)
- [Commits](https://github.com/python-cffi/release-doc/commits)

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.1.0 to 20.2.1.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](pypa/virtualenv@20.1.0...20.2.1)

Signed-off-by: dependabot[bot] <support@github.com>
SDK-1583: Merge GitHub actions CI steps into development
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.2.1 to 20.4.3.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](pypa/virtualenv@20.2.1...20.4.3)

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [pytz](https://github.com/stub42/pytz) from 2020.4 to 2021.1.
- [Release notes](https://github.com/stub42/pytz/releases)
- [Commits](stub42/pytz@release_2020.4...release_2021.1)

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [iso8601](https://github.com/micktwomey/pyiso8601) from 0.1.13 to 0.1.14.
- [Release notes](https://github.com/micktwomey/pyiso8601/releases)
- [Commits](micktwomey/pyiso8601@0.1.13...0.1.14)

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [cffi](https://github.com/python-cffi/release-doc) from 1.14.4 to 1.14.5.
- [Release notes](https://github.com/python-cffi/release-doc/releases)
- [Commits](https://github.com/python-cffi/release-doc/commits)

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 1.0.1 to 2.0.1.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](pallets/werkzeug@1.0.1...2.0.1)

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.4.3 to 20.4.7.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](pypa/virtualenv@20.4.3...20.4.7)

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 3.17.1 to 3.17.3.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/master/generate_changelog.py)
- [Commits](protocolbuffers/protobuf@v3.17.1...v3.17.3)

---
updated-dependencies:
- dependency-name: protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
# Conflicts:
#	examples/yoti_example_django/requirements.txt
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.4.7 to 20.7.2.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](pypa/virtualenv@20.4.7...20.7.2)

---
updated-dependencies:
- dependency-name: virtualenv
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [cffi](http://cffi.readthedocs.org) from 1.14.5 to 1.14.6.

---
updated-dependencies:
- dependency-name: cffi
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [iso8601](https://github.com/micktwomey/pyiso8601) from 0.1.14 to 0.1.16.
- [Release notes](https://github.com/micktwomey/pyiso8601/releases)
- [Commits](micktwomey/pyiso8601@0.1.14...0.1.16)

---
updated-dependencies:
- dependency-name: iso8601
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.7.2 to 20.8.1.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](pypa/virtualenv@20.7.2...20.8.1)

---
updated-dependencies:
- dependency-name: virtualenv
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [deprecated](https://github.com/tantale/deprecated) from 1.2.12 to 1.2.13.
- [Release notes](https://github.com/tantale/deprecated/releases)
- [Changelog](https://github.com/tantale/deprecated/blob/master/CHANGELOG.rst)
- [Commits](laurent-laporte-pro/deprecated@v1.2.12...v1.2.13)

---
updated-dependencies:
- dependency-name: deprecated
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
echarrod and others added 29 commits January 28, 2022 16:45
Bumps [pytz](https://github.com/stub42/pytz) from 2021.1 to 2021.3.
- [Release notes](https://github.com/stub42/pytz/releases)
- [Commits](stub42/pytz@release_2021.1...release_2021.3)

---
updated-dependencies:
- dependency-name: pytz
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.12.0 to 20.13.0.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](pypa/virtualenv@20.12.0...20.13.0)

---
updated-dependencies:
- dependency-name: virtualenv
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 3.19.3 to 3.19.4.
- [Release notes](https://github.com/protocolbuffers/protobuf/releases)
- [Changelog](https://github.com/protocolbuffers/protobuf/blob/master/generate_changelog.py)
- [Commits](protocolbuffers/protobuf@v3.19.3...v3.19.4)

---
updated-dependencies:
- dependency-name: protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
# Conflicts:
#	.github/workflows/tests.yaml
#	.pre-commit-config.yaml
#	examples/yoti_example_flask/requirements.in
#	examples/yoti_example_flask/requirements.txt
#	requirements.in
#	requirements.txt
#	setup.py
#	sonar-project.properties
#	yoti_python_sdk/version.py
Bumps [pip-tools](https://github.com/jazzband/pip-tools) from 6.4.0 to 6.6.2.
- [Release notes](https://github.com/jazzband/pip-tools/releases)
- [Changelog](https://github.com/jazzband/pip-tools/blob/master/CHANGELOG.md)
- [Commits](jazzband/pip-tools@6.4.0...6.6.2)

---
updated-dependencies:
- dependency-name: pip-tools
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.13.0 to 20.14.1.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](pypa/virtualenv@20.13.0...20.14.1)

---
updated-dependencies:
- dependency-name: virtualenv
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [werkzeug](https://github.com/pallets/werkzeug) from 2.0.2 to 2.1.2.
- [Release notes](https://github.com/pallets/werkzeug/releases)
- [Changelog](https://github.com/pallets/werkzeug/blob/main/CHANGES.rst)
- [Commits](pallets/werkzeug@2.0.2...2.1.2)

---
updated-dependencies:
- dependency-name: werkzeug
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Bumps [virtualenv](https://github.com/pypa/virtualenv) from 20.14.1 to 20.15.1.
- [Release notes](https://github.com/pypa/virtualenv/releases)
- [Changelog](https://github.com/pypa/virtualenv/blob/main/docs/changelog.rst)
- [Commits](pypa/virtualenv@20.14.1...20.15.1)

---
updated-dependencies:
- dependency-name: virtualenv
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
* added python static liveness check
* SDK-2267:updated refs
* SDK-2267:version update
* Release/2.14.3 (#420)
Python library updates
* Release/2.14.4 (#423)
* SDK-2648 updated version of protobuf
* Update version to 2.14.4
* SDK-2648: Update protobuf to 4.21.12+
* Remove accidentally committed virtual environment files from Flask example
* Update doc_scan example requirements for protobuf 4.21.12 and SDK v2.14.4
* Update Flask example requirements for protobuf 4.21.12 and SDK v2.14.4
* updated versions in examples
* Fix GitHub Actions workflow to install local SDK before example requirements
* Release/2.14.5 (#436)
* Python library updates
* added python static liveness check (#425)
* update version files
* updated protobuf error
* fix: update example requirements to be compatible with SDK cryptography>=42.0.0
doc_scan/requirements.txt pinned cryptography==41.0.7 which conflicts with
the SDK's install_requires (cryptography>=42.0.0), breaking the CI examples
job. Updated both example requirements files and clarified the headers to
reflect that they contain SDK-inherited range constraints.
* fix: sync cryptography constraint and prevent local SDK override in CI
- requirements.in: cryptography>=41.0.7 -> >=42.0.0 to match setup.py,
  remove leading blank line
- tests.yaml: reinstall local SDK after AML/Django examples, which pin
  yoti==2.14.0 from PyPI and would otherwise override the editable install
- flask/doc_scan requirements.txt: clarify # via yoti (installed separately)
  annotations since yoti is no longer in requirements.in
…resources tasks (#462)

* SDK-2758-python-add-support-for-requesting-and-retrieving-share-code-resources-tasks
* Fix Copilot review issues and rebase onto development
* Fix remaining is comparison for BASIC auth type in test
…s field from the IDV pages - python (#461)

* feat(SDK-2792): Python - Add support for retrieving the extraction_image_ids field from the IDV pages [python]
Rebase onto development to resolve conflicts.
* fix(SDK-2792): fix typo and remove duplicate entries in requirements.in [python]
* fix(SDK-2792): remove unsafe packages comments from requirements files [python]
…c Liveness resources - python (#460)

* feat(SDK-2781): Python - Add support for new capture_type property on Static Liveness resources [python]
…hon (#459)

* feat(SDK-2614): Python - Support configuration for IDV shortened flow [python]
* fix(SDK-2614): address Copilot review comments on sdk_config
- Fix docstring param order to match function signature (allow_handoff before privacy_policy_url)
- Copy suppressed_screens list in build() to prevent mutation of built configs
- Use == instead of is for string assertions in tests
- Add test for empty suppressed_screens list serialization
)

* feat(SDK-2473): Python - IDV Support Brand ID in session config [python]
* fix(SDK-2473): fix docstring param order and test assertions [python]
- Reorder allow_handoff/privacy_policy_url in docstring to match signature
- Use == instead of is for string value assertions in tests
- Add .claude/ to .gitignore and remove settings.local.json from tracking
* SDK-2743-python-expose-idv-breakdown-process-property
* fix: apply Copilot review suggestions on BreakdownResponse
- Use == instead of is for string comparisons in test assertions
- Clarify process property docstring to mention breakdown process type
#452)

* SDK-2792-python-add-support-for-retrieving-the-extraction-image-ids-field-from-the-idv-pages
…dk examples (#463)

* SDK-2803 Phase 1: bump core SDK dependencies to close High-severity CVEs

- cryptography >=44.0.1 (CVE-2024-12797 bundled-OpenSSL)
- pyopenssl >=26.0.0
- requests >=2.32.4 (CVE-2024-47081 .netrc leak)
- urllib3 >=2.6.3 (decompression/encoding/redirect CVEs)
- cffi >=1.17.1, wheel >=0.46.2 (CVE-2026-24049), PyYAML >=6.0.2,
  wrapt >=1.17.2, itsdangerous >=2.2.0
- regenerated requirements.txt picks up fresh certifi (2026.4.22),
  idna (3.15) which closes those transitive CVEs

* SDK-2803 Phase 2: bump protobuf to >=4.25.8,<6 and regenerate pb2 modules

- protobuf 3.20.3 -> >=4.25.8,<6 in setup.py and requirements.in;
  pip-compile resolves to 5.29.6, closing CVE-2025-4565 and CVE-2026-0994
  (recursion DoS in google.protobuf).
- Regenerate all *_pb2.py via protoc 3.21.12 from sdk-protobuf/proto/.
  Output now uses the _builder.BuildMessageAndEnumDescriptors API that
  is required by protobuf 4.x/5.x runtimes.
- _pb2_grpc.py stubs are unused in this SDK and left untouched.
- pytest: 438 passed, 0 failed.

* SDK-2803 Phase 3: upgrade example apps to close shipped CVEs

aml: no .in change, regenerated to pick up new core deps
doc_scan: flask>=3.0.6, pyopenssl>=26.0.0, deprecated>=1.2.14,
  iso8601>=1.1.0, pytz>=2025.2, click>=8.1
django: django 4.0.1 -> 4.2 LTS (closes critical SQLi CVEs),
  urllib3>=2.6.3, requests>=2.32.4, cffi>=1.17.1; remove unused six;
  add DEFAULT_AUTO_FIELD = BigAutoField to settings.py for 4.2
flask: flask 1->3.0.6 (CVE-2023-30861), werkzeug 1->3.0.6
  (request smuggling, debugger RCE, path traversal CVEs),
  jinja2>=3.1.6 (5 CVEs), pyopenssl, urllib3, requests bumped,
  itsdangerous>=2.2.0 added explicitly; remove unused six
setup.py extras_require[examples]: Django>=4.2,<5.3, Flask>=3.0.6,
  Werkzeug>=3.0.6
* fix(SDK-2803): add urllib3>=2.6.3 to install_requires to enforce CVE floor [python]
* fix: pin protobuf<6 in aml example to match SDK install_requires constraint
The colon-space sequence in :all: was interpreted as a YAML mapping
indicator, breaking workflow parsing and preventing all checks from
starting. Wrap affected run: values in single quotes.
- Add # NOSONAR to all pip install steps in CI workflow to suppress
  "unlocked versions" and "no --only-binary" warnings for editable installs
- Add python_version < "3.9" marker to backports.zoneinfo in Django
  requirements.txt so it is skipped on Python 3.9+ (package has
  Requires-Python < 3.9, causing install failure with --only-binary)
- Replace dict() constructor with {} literal in share_code_resource_response
  and share_code_media_response (SonarCloud S6660 rule)
Reverts commits 2d79d35, b29e7b7, e0dcfe2. The --only-binary :all:
changes broke example builds (backports.zoneinfo has no wheel for
Python 3.9). Restoring to state at d4c1e28.
The tests.yaml file was flagged as new code after the merge added the
reinstall-local-SDK step. This caused SonarQube to re-analyse all
pre-existing pip install lines as new findings. Added # NOSONAR to
each affected line to suppress without altering the actual commands.
@sonarqubecloud

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants