Commit Graph
356 Commits
Author SHA1 Message Date
renovate-bot-cbcoutinho[bot]andGitHub 0c6565fa82 chore(deps): update docker/build-push-action action to v7 2026-05-22 04:34:40 +00:00
renovate-bot-cbcoutinho[bot]andGitHub e7e3862c6d chore(deps): update actions/upload-artifact digest to ea165f8 2026-05-21 04:33:50 +00:00
Chris CoutinhoandClaude Opus 4.7 a0b29a436e feat(ci): build arm64 Docker images natively on ubuntu-24.04-arm
Split the Docker image build into a per-platform matrix and merge job,
producing a single multi-arch manifest (linux/amd64 + linux/arm64) without
QEMU emulation. The arm64 build runs on the native ubuntu-24.04-arm runner.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 08:06:36 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 246f3b734c chore(deps): update shivammathur/setup-php action to v2.37.1 2026-05-15 04:27:34 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 4626ca3858 chore(deps): update anthropics/claude-code-action action to v1.0.123 2026-05-15 04:27:09 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 1db57f4d56 chore(deps): update anthropics/claude-code-action action to v1.0.121 2026-05-13 04:27:27 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 1b2846093d chore(deps): update anthropics/claude-code-action action to v1.0.120 2026-05-12 04:24:06 +00:00
Chris CoutinhoandGitHub 2d29b3801c Merge pull request #770 from cbcoutinho/renovate/nextcloud-32-32.0.9
chore(deps): update nextcloud-32:32.0.9 docker digest to 6052173
2026-05-10 17:56:59 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 4b0a556750 chore(deps): update nextcloud-33:33.0.3 docker digest to 90a730e 2026-05-09 16:21:38 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 4774af1b69 chore(deps): update nextcloud-32:32.0.9 docker digest to 6052173 2026-05-09 16:21:32 +00:00
Chris CoutinhoandClaude Opus 4.7 4c84d82984 fix(auth): address PR #758 auto-review (id-token verify, nonce, CI key)
Blocking:
- AS proxy callback now calls verify_id_token before caching the proxy
  code so a tampered IdP response can't smuggle identity claims.

Important:
- Browser OAuth flow generates and verifies an OIDC nonce; new alembic
  migration 006 adds the nonce column to oauth_sessions.
- _origin_matches_self logs a warning when CSRF check is bypassed.
- oauth_tools.py uses get_shared_storage instead of fresh handles.

Nits:
- New token_utils.get_oidc_discovery shares the 5-minute cache with
  verify_id_token; oauth_login (integrated) and _revoke_refresh_token_at_idp
  now use it instead of issuing fresh discovery fetches.
- Drop typing.Optional from oauth_tools.py in favour of X | None.

CI:
- test.yml generates an ephemeral Fernet TOKEN_ENCRYPTION_KEY per run
  with openssl, removing the dependency on a missing repo secret.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 20:48:25 +02:00
Chris CoutinhoandClaude Opus 4.7 2ef4bfc4af fix(auth): fail closed on missing sub claim, delete Flow 2 callback session
Addresses the two remaining 🟡 findings from the PR #758 follow-up review:

  1. extract_user_id_from_token previously fell back to "default_user" when
     the verified access token had no sub claim. In a multi-tenant deployment
     a malformed IdP token could have bucketed every request under a single
     sentinel user, risking cross-tenant data exposure. The function now
     raises McpError on that branch; the BasicAuth no-token sentinel path is
     preserved.

  2. oauth_callback_nextcloud (Flow 2) read the PKCE code_verifier from
     oauth_sessions but never deleted the row, leaving the verifier valid for
     the full 10-minute TTL. The row is now deleted eagerly inside the same
     branch, mirroring oauth_login_callback in browser_oauth_routes.

Also wires TOKEN_ENCRYPTION_KEY through the docker-compose step in the CI
test workflow so the integration matrix can boot — every job had been
failing fast on the ${TOKEN_ENCRYPTION_KEY:?...} interpolation guard added
in PR #758 finding 5.

Tests pin both fixes (test_token_utils_user_id.py,
test_oauth_callback_session_cleanup.py).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 19:46:36 +02:00
Chris CoutinhoandGitHub 83f2e88d2c Merge pull request #755 from cbcoutinho/renovate/nextcloud-32-32.x
chore(deps): update nextcloud-32 docker tag to v32.0.9
2026-05-02 16:13:29 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 774e6a119f chore(deps): update nextcloud-33 docker tag to v33.0.3 2026-05-02 04:23:08 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 9461bf2897 chore(deps): update nextcloud-32 docker tag to v32.0.9 2026-05-02 04:23:01 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 5573f608eb chore(deps): update anthropics/claude-code-action action to v1.0.111 2026-05-01 04:21:55 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 88b186d245 chore(deps): update anthropics/claude-code-action action to v1.0.110 2026-04-30 04:23:37 +00:00
Chris CoutinhoandClaude Opus 4.7 bd4921091e docs(security): address second round of review feedback
- SECURITY.md: add Supported Versions table; reword SLA paragraph as
  a bullet list per reviewer suggestion
- bug_report.yml: render reproduction textarea as shell so commands and
  JSON get syntax highlighting, matching the logs field
- question.yml: add transport and install_method dropdowns mirroring
  bug_report.yml so setup questions capture the same context

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 23:45:25 +02:00
Chris CoutinhoandClaude Opus 4.7 dc820aaa4c docs(security): address review feedback on PR #740
- SECURITY.md: add response SLA (5 business days / 30 days)
- bug_report.yml: scope the Docker log command to Docker installs
- question.yml: align deployment_mode catch-all wording with bug_report.yml

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 23:22:07 +02:00
Chris CoutinhoandClaude Opus 4.7 d6362dc773 docs(security): prefer GitHub private vulnerability reporting
Surface GitHub's native private reporting workflow as the primary
disclosure channel, with security@astrolabecloud.com kept as a fallback
for reporters without a GitHub account. Updates SECURITY.md, the README
Security section, the issue-template config link, and the bug-template
warning banner.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 23:09:39 +02:00
Chris CoutinhoandClaude Opus 4.7 8cc84ac08b docs: add SECURITY.md and GitHub issue templates
Add a security policy directing private vulnerability reports to
security@astrolabecloud.com instead of public issues, and update the
README's Security section to point at it.

Add structured issue forms under .github/ISSUE_TEMPLATE/ covering bugs,
feature requests, questions, and documentation, plus a config.yml that
disables blank issues and routes security reports and open-ended
questions to the appropriate channels. The bug template captures
fields most commonly missing from past reports (server/Nextcloud/app
versions, deployment mode, transport, MCP client).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 23:05:29 +02:00
Chris CoutinhoandClaude Opus 4.7 efa33a1331 ci(claude-review): use sticky tracking comment instead of stacking
Bumps the claude-code-action pin to v1.0.97 and turns on
`track_progress` + `use_sticky_comment` so reviews update a single
tracking comment per PR instead of appending a fresh comment on every
push. Mirrors the pattern in astrolabe-cloud-website.

The prompt now directs Claude to deliver the review by editing the
tracking comment via `mcp__github_comment__update_claude_comment`, and
`Bash(gh pr comment:*)` is dropped from the allowed-tools list since
that path is no longer used. Permissions widen from read to write on
pull-requests + issues so the action can edit its own comment.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 22:22:32 +02:00
renovate-bot-cbcoutinho[bot]andGitHub a3934535bf chore(deps): update nextcloud-32:32.0.8 docker digest to 334f45c 2026-04-27 04:21:29 +00:00
renovate-bot-cbcoutinho[bot]andGitHub d765067a27 chore(deps): update actions/setup-node action to v6 2026-04-20 04:16:51 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 310f0d1112 chore(deps): update hoverkraft-tech/compose-action action to v2.6.0 2026-04-17 04:18:35 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 0d4f4419c0 chore(deps): update actions/upload-artifact action to v7.0.1 2026-04-10 22:15:21 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 4fbdd471ad chore(deps): update anthropics/claude-code-action action to v1.0.90 2026-04-08 10:19:11 +00:00
Chris CoutinhoandClaude Opus 4.6 1e380caade ci: remove PAT from release workflows, use workflow_call instead
Tags pushed with GITHUB_TOKEN don't trigger other workflows (GitHub's
anti-recursion protection), which is why a PAT was needed. Instead,
chain release and docker workflows directly via workflow_call from
bump-version, eliminating the need for a personal access token.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 22:10:25 +02:00
Chris CoutinhoandGitHub d7653535f0 Merge pull request #658 from cbcoutinho/renovate/nextcloud-31-31.0.14
chore(deps): update nextcloud-31:31.0.14 docker digest to 07ec73c
2026-04-07 17:10:32 +02:00
Chris CoutinhoandClaude Opus 4.6 c4b74e7e20 chore: remove helm chart (migrated to cbcoutinho/helm-charts)
The helm chart has been migrated to a dedicated repository at
https://github.com/cbcoutinho/helm-charts. This removes the chart
source, release workflow, bump script, and updates all documentation
to point to the new repository.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-07 16:31:35 +02:00
Chris CoutinhoandGitHub cc40f8f916 Merge pull request #661 from cbcoutinho/renovate/nextcloud-32-32.x
chore(deps): update nextcloud-32 docker tag to v32.0.8
2026-04-07 12:42:17 +02:00
renovate-bot-cbcoutinho[bot]andGitHub be4aeeb1d5 chore(deps): update nextcloud-33 docker tag to v33.0.2 2026-04-07 10:19:32 +00:00
renovate-bot-cbcoutinho[bot]andGitHub a82491de15 chore(deps): update nextcloud-32 docker tag to v32.0.8 2026-04-07 10:19:27 +00:00
Chris CoutinhoandGitHub 204053d262 Merge pull request #679 from cbcoutinho/fix/cloud-client-registration
fix: support cloud OAuth clients and graceful DCR fallback
2026-04-05 19:40:30 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 3038e3b936 chore(deps): update anthropics/claude-code-action action to v1.0.89 2026-04-05 16:13:51 +00:00
Chris CoutinhoandClaude Opus 4.6 7d775d2a52 refactor: remove ALLOWED_MCP_CLOUD_CLIENTS and add keycloak CI profile
Remove the unused ALLOWED_MCP_CLOUD_CLIENTS env var — all clients are
defined via ALLOWED_MCP_CLIENTS or the static well-known defaults.
Add keycloak as an integration test profile in CI now that login-flow
replaces the old bearer token approach for external IdPs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 15:06:56 +02:00
Chris CoutinhoandGitHub 877535aeb7 Merge pull request #674 from cbcoutinho/refactor/remove-oauth-profile
refactor: remove oauth profile, migrate MCP/OAuth tests to login-flow
2026-04-04 10:31:42 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 1234bfcbaf chore(deps): update anthropics/claude-code-action action to v1.0.85 2026-04-02 04:21:06 +00:00
Chris CoutinhoandClaude Opus 4.6 aeddc28ca6 refactor: remove oauth profile, migrate MCP/OAuth tests to login-flow
Remove the oauth Docker Compose profile (mcp-oauth service, port 8001)
which used OAuth bearer tokens for direct NC API access, requiring
upstream OIDC patches. All NC access should use app passwords via
Login Flow v2 or BasicAuth.

Changes:
- Remove mcp-oauth service from docker-compose.yml
- Remove oauth mode from CI test matrix
- Delete oauth pass-through tests (core, permissions, token exchange)
- Delete oauth-specific tests (elicitation, NC PHP app, astrolabe)
- Migrate MCP/OAuth integration tests to login-flow profile:
  - DCR lifecycle, deletion, token type tests
  - Scope authorization (tool filtering) tests
  - Token introspection tests
- Fix flaky consent screen automation: replace JS btn.click() with
  Playwright native click + retry (handles Vue.js event binding race)
- Add scope-filtered OAuth client fixtures to login-flow conftest
- Keep keycloak profile for external IdP testing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-01 16:05:14 +02:00
Chris CoutinhoandClaude Opus 4.6 fe8799a133 fix: resolve OAuth compatibility issues for login-flow deployment
- Drop OIDC fork: comment out third_party/oidc mount, use upstream
  v1.16.3 from app store (fixes consent redirect race, PR #631)
- Support client_secret_basic auth: add _extract_basic_auth() helper
  so TS MCP SDK can authenticate at token endpoint (RFC 6749 §2.3.1)
- Multi-issuer JWT validation: accept tokens with internal Docker
  issuer (http://app:80) or public URL (NEXTCLOUD_PUBLIC_ISSUER_URL)
  since AS proxy obtains tokens server-to-server
- Introspection fallback: try token introspection when JWT verification
  fails, supporting both JWT and opaque token types
- Register all tool scopes in DCR: add semantic:read, collectives:read,
  collectives:write to OIDC client allowed_scopes so tokens include
  them and semantic search tools are visible to authenticated clients
- Auto-create Astrolabe OAuth client: new app-hook creates OIDC client
  and stores credentials in config.php so the "Authorize via OAuth"
  button works without manual setup

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-29 15:05:26 +02:00
renovate-bot-cbcoutinho[bot]andGitHub 4354ee7270 chore(deps): update nextcloud-33 docker tag to v33.0.1 2026-03-28 11:20:49 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 5d380f9819 chore(deps): update nextcloud-31:31.0.14 docker digest to 07ec73c 2026-03-28 10:13:40 +00:00
Chris CoutinhoandGitHub 89791a558b Merge pull request #657 from cbcoutinho/fix/renovate-nextcloud-version-pinning
fix: pin Renovate Nextcloud updates to matching major version
2026-03-28 10:53:11 +01:00
Chris CoutinhoandClaude Opus 4.6 1482d2d43d fix: pin Renovate Nextcloud updates to matching major version
The custom regex manager matched all nextcloud_image entries with the
same depName, causing Renovate to bump all matrix entries (NC 31, 32, 33)
to the latest version instead of only the targeted major.

Fix by capturing nextcloud_version to create version-specific dep names
(nextcloud-31, nextcloud-32, nextcloud-33) with allowedVersions rules
constraining each to its own major. Also pins docker-compose.yml to 32.x
and removes redundant inline # renovate: comments that could cause
duplicate matching.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-28 10:48:55 +01:00
renovate-bot-cbcoutinho[bot]andGitHub 162bb5b7e4 chore(deps): update anthropics/claude-code-action action to v1.0.81 2026-03-27 23:20:33 +00:00
renovate-bot-cbcoutinho[bot]andGitHub 84fafa6a6b chore(deps): update anthropics/claude-code-action action to v1.0.80 2026-03-26 23:19:45 +00:00
renovate-bot-cbcoutinho[bot]andGitHub f14b2ec76e chore(deps): update anthropics/claude-code-action action to v1.0.79 2026-03-26 05:22:41 +00:00
Chris CoutinhoandGitHub b62442b767 Merge pull request #636 from cbcoutinho/renovate/anthropics-claude-code-action-1.x
chore(deps): update anthropics/claude-code-action action to v1.0.76
2026-03-22 13:33:00 +01:00
renovate-bot-cbcoutinho[bot]andGitHub 073bc3e015 chore(deps): update anthropics/claude-code-action action to v1.0.76 2026-03-20 23:22:20 +00:00
Chris CoutinhoandClaude Opus 4.6 ad4ceaff30 fix: resolve OIDC consent flow 500 errors on NC 32
Root cause: ConsentController::grant() only passed client_id and scope
in the post-consent redirect, relying on PHP session fallback for state,
response_type, redirect_uri etc. On NC 32 (PHP 8.4), session values
were intermittently lost between session->close() and the subsequent GET
request, causing 500 errors from trim(null) / matchRedirectUri(null).

OIDC app fixes:
- Pass all OAuth params in consent redirect URL (eliminates session race)
- Add null safety guard in authorize endpoint (400 instead of 500)

Test infra fixes:
- Wait for OIDC redirect chain to settle before handling consent screen
  (fixes "Execution context was destroyed" Playwright errors)
- Capture nextcloud.log in CI failure artifacts for PHP error debugging

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-18 16:47:20 +01:00