Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
91710d6
feat(platform): Configurable retries on exchanging refresh token for …
helmut-hoffer-von-ankershoffen Oct 8, 2025
ad0990c
feat(platform): Configurable retries on exchanging refresh token for …
helmut-hoffer-von-ankershoffen Oct 8, 2025
729a139
chore(deps): bump
helmut-hoffer-von-ankershoffen Oct 8, 2025
e68ff98
fix(platform): return type of internal methods
helmut-hoffer-von-ankershoffen Oct 8, 2025
209ec1a
feat(platform): Configurable retries on exchanging refresh token for …
helmut-hoffer-von-ankershoffen Oct 8, 2025
a7fcc86
fix(utils): validation error on broken api root
helmut-hoffer-von-ankershoffen Oct 8, 2025
a082c58
refactor(platform): address Claude code review
helmut-hoffer-von-ankershoffen Oct 8, 2025
91f1de3
chore(platform): improve tests
helmut-hoffer-von-ankershoffen Oct 8, 2025
22aef0b
sec(platform): sanitize exceptions logged
helmut-hoffer-von-ankershoffen Oct 8, 2025
3b28288
fix(platform): make the jwt client cache depend on settings
helmut-hoffer-von-ankershoffen Oct 8, 2025
0d9e055
refactor(platform): addressing claude code review
helmut-hoffer-von-ankershoffen Oct 8, 2025
2bf6d6f
refactor(platform): addressing claude code review
helmut-hoffer-von-ankershoffen Oct 8, 2025
494cdc8
refactor(platform): addressing claude code review
helmut-hoffer-von-ankershoffen Oct 8, 2025
81f4800
doc(platform): tweaks
helmut-hoffer-von-ankershoffen Oct 8, 2025
fb04a3a
doc(platform): tweaks
helmut-hoffer-von-ankershoffen Oct 8, 2025
769de3a
fix(platform): fix wrong exception handler in _perform_device_flow - …
helmut-hoffer-von-ankershoffen Oct 8, 2025
9937c64
doc(platform): tweaks
helmut-hoffer-von-ankershoffen Oct 8, 2025
5bde879
chore(platform): fix in test
helmut-hoffer-von-ankershoffen Oct 8, 2025
f13e19d
feat(platform): auto-retry on me
helmut-hoffer-von-ankershoffen Oct 8, 2025
467a16a
feat(platform): configurable platform health timeout
helmut-hoffer-von-ankershoffen Oct 8, 2025
2de1222
docs(AI): hint lambdas
helmut-hoffer-von-ankershoffen Oct 8, 2025
f679d0b
fix(platform): add missing validator for wait min/max of me
helmut-hoffer-von-ankershoffen Oct 8, 2025
2915252
feat(platform): introduce authentication aware operation cache
helmut-hoffer-von-ankershoffen Oct 8, 2025
c1ab8d7
chore(platform): fix tests
helmut-hoffer-von-ankershoffen Oct 8, 2025
3a8b544
chore(platform); fix test
helmut-hoffer-von-ankershoffen Oct 8, 2025
2f779e6
chore(application): mark test as flaky
helmut-hoffer-von-ankershoffen Oct 8, 2025
8b1a33a
refactor(platform): make timeouts and wait times float, was int
helmut-hoffer-von-ankershoffen Oct 9, 2025
1235435
chore: Add pytest-durations to show durations of fixtures and tests
helmut-hoffer-von-ankershoffen Oct 9, 2025
d2f01d9
fix(platform): clear jwk client cache consistently where needed in tests
helmut-hoffer-von-ankershoffen Oct 9, 2025
11e6195
chore(gha): run 16 tests in parallel on GitHub given we wait a lot
helmut-hoffer-von-ankershoffen Oct 9, 2025
070de4b
chore(tests): revert test parallelization change
helmut-hoffer-von-ankershoffen Oct 9, 2025
d4bf194
refactor(platform,system): proper connection pooling
helmut-hoffer-von-ankershoffen Oct 9, 2025
c6fb270
fix(platform): dynamic user agent for /me
helmut-hoffer-von-ankershoffen Oct 9, 2025
eaa5eaf
fix(platform): dynamic user agent for /me
helmut-hoffer-von-ankershoffen Oct 9, 2025
29757c3
style(utils): consistent log formatting for file and console, both in…
helmut-hoffer-von-ankershoffen Oct 9, 2025
0cc04d5
chore(platform): adapt me test
helmut-hoffer-von-ankershoffen Oct 9, 2025
f9efadf
chore(platform): adapt me test
helmut-hoffer-von-ankershoffen Oct 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/_audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
uses: astral-sh/setup-uv@eb1897b8dc4b5d5bfe39a428a8f2304605e0983c # v7.0.0
with:
version-file: "pyproject.toml"
enable-cache: true
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_build-native-only.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
uses: astral-sh/setup-uv@eb1897b8dc4b5d5bfe39a428a8f2304605e0983c # v7.0.0
with:
version-file: "pyproject.toml"
enable-cache: true
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/_codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v3
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
# If you wish to specify custom queries, you can do so here or in a config file.
Expand All @@ -77,9 +77,9 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, Java, or Swift).
# If this step fails, then you should remove it and run the build manually
- name: Autobuild
uses: github/codeql-action/autobuild@v3
uses: github/codeql-action/autobuild@v4

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{ matrix.language }}"
2 changes: 1 addition & 1 deletion .github/workflows/_lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
uses: astral-sh/setup-uv@eb1897b8dc4b5d5bfe39a428a8f2304605e0983c # v7.0.0
with:
version-file: "pyproject.toml"
enable-cache: true
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/_package-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
uses: astral-sh/setup-uv@eb1897b8dc4b5d5bfe39a428a8f2304605e0983c # v7.0.0
with:
version-file: "pyproject.toml"
enable-cache: true
Expand Down Expand Up @@ -100,7 +100,7 @@ jobs:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
uses: astral-sh/setup-uv@eb1897b8dc4b5d5bfe39a428a8f2304605e0983c # v7.0.0
with:
version-file: "pyproject.toml"
cache-dependency-glob: uv.lock
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_scheduled-audit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ jobs:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
uses: astral-sh/setup-uv@eb1897b8dc4b5d5bfe39a428a8f2304605e0983c # v7.0.0
with:
version-file: "pyproject.toml"
enable-cache: true
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_scheduled-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
uses: astral-sh/setup-uv@eb1897b8dc4b5d5bfe39a428a8f2304605e0983c # v7.0.0
with:
version-file: "pyproject.toml"
enable-cache: true
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
fetch-depth: 0

- name: Install uv
uses: astral-sh/setup-uv@d0cc045d04ccac9d8b7881df0226f9e82c39688e # v6.8.0
uses: astral-sh/setup-uv@eb1897b8dc4b5d5bfe39a428a8f2304605e0983c # v7.0.0
with:
version-file: "pyproject.toml"
enable-cache: true
Expand Down
49 changes: 25 additions & 24 deletions CODE_STYLE.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ We favor readability and maintainability over cleverness and brevity.
dependencies.
5. We always write code that is compatible with the Python version indicated in
the .python-version file in the root of this repository.
6. We like functional programming and lambdas.

## Naming

Expand Down Expand Up @@ -111,12 +112,12 @@ We use [pytest](https://docs.pytest.org/en/stable/) for testing Python code.
1. Tests are defined in the `tests/` directory
2. We use pytest fixtures to set up test data and state
3. We leverage several pytest plugins:
1. `pytest-asyncio` for testing async code
2. `pytest-cov` for coverage reporting
3. `pytest-docker` for integration tests with containers
4. `pytest-env` for environment variable management
5. `pytest-regressions` for regression testing
6. `pytest-xdist` for parallel test execution
1. `pytest-asyncio` for testing async code
2. `pytest-cov` for coverage reporting
3. `pytest-docker` for integration tests with containers
4. `pytest-env` for environment variable management
5. `pytest-regressions` for regression testing
6. `pytest-xdist` for parallel test execution
4. Test execution is automated through the nox test session which runs across the
Python versions indicated in the `pyproject.toml`.

Expand Down Expand Up @@ -193,8 +194,8 @@ and protect our users.
1. Follow the principle of least privilege for all operations and access
controls.
2. Never store secrets (API keys, passwords, tokens) in code repositories.
1. Use environment variables or dedicated secret management services.
2. Code is checked via `detect-secrets` pre-commit hook to prevent accidental
1. Use environment variables or dedicated secret management services.
2. Code is checked via `detect-secrets` pre-commit hook to prevent accidental
commits of secrets.

We implement proper input validation and sanitization for all external inputs
Expand All @@ -208,11 +209,11 @@ We handle authentication and authorization correctly:
2. Separate authentication from authorization logic.
3. Implement proper session management with secure cookies.
4. Protect against common vulnerabilities:
1. SQL Injection: Use parameterized queries or ORM frameworks.
2. XSS: Apply proper output encoding.
3. CSRF: Implement anti-CSRF tokens for state-changing operations.
4. SSRF: Validate and restrict URL destinations.
5. Command Injection: Avoid direct system command execution where possible.
1. SQL Injection: Use parameterized queries or ORM frameworks.
2. XSS: Apply proper output encoding.
3. CSRF: Implement anti-CSRF tokens for state-changing operations.
4. SSRF: Validate and restrict URL destinations.
5. Command Injection: Avoid direct system command execution where possible.
5. Implement proper error handling that doesn't leak sensitive information.
6. Use secure defaults and fail closed (secure) rather than open (insecure).

Expand All @@ -222,17 +223,17 @@ We apply the principle of defense in depth:
2. Implement multiple layers of protection.
3. Document security considerations in code and design documents.
4. Write security-focused tests:
1. Test for security property violations.
2. Test error cases and edge conditions.
3. Test for resource exhaustion scenarios.
1. Test for security property violations.
2. Test error cases and edge conditions.
3. Test for resource exhaustion scenarios.
5. Apply proper rate limiting and throttling to prevent abuse.
6. For cryptographic operations:
1. Use established libraries, not custom implementations.
2. Follow current best practices for algorithm selection and key management.
3. Be aware of the limitations of cryptographic primitives.
1. Use established libraries, not custom implementations.
2. Follow current best practices for algorithm selection and key management.
3. Be aware of the limitations of cryptographic primitives.
7. Regularly run security-focused static analysis tools as part of CI/CD:
1. CodeQL analysis (via GitHub Actions)
2. SonarCloud checks for security vulnerabilities
1. CodeQL analysis (via GitHub Actions)
2. SonarCloud checks for security vulnerabilities

Our security posture is defined in [SECURITY.md](SECURITY.md).

Expand All @@ -244,9 +245,9 @@ We use modern dependency management practices:
and environment management
2. Dependency version locking via uv.lock file
3. Regular dependency auditing:
1. Security auditing via `pip-audit`
2. License compliance checks via `pip-licenses`
3. SBOM generation via `cyclonedx-py`
1. Security auditing via `pip-audit`
2. License compliance checks via `pip-licenses`
3. SBOM generation via `cyclonedx-py`

Dependency updates are automated via Dependabot and Renovate to ensure we stay
current with security patches.
Expand Down
Loading
Loading