Commit Graph
38 Commits
Author SHA1 Message Date
027fc0b2d6 docs: Add critical token exchange pattern documentation
Documents the architectural flaw in current implementation where
session tokens and background tokens are not properly separated.

Key issues identified:
- Session tokens should be exchanged on-demand (RFC 8693)
- Background tokens should use separate refresh token grant
- Current implementation reuses refresh tokens incorrectly
- No separation between foreground and background operations

This is a P0 blocker that must be fixed before production use.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 20:33:55 +01:00
d768909fd4 feat: Implement ADR-004 Progressive Consent foundation (partial)
Implements Progressive Consent architecture with dual OAuth flows:
- Flow 1: Direct client authentication (aud: "mcp-server")
- Flow 2: Resource provisioning with refresh tokens

Components added:
- Client registry with validation (client_registry.py)
- Progressive token verifier (progressive_token_verifier.py)
- Token broker service integration
- Provisioning decorator for MCP tools
- OAuth provisioning tools (provision_nextcloud_access, etc.)

Configuration:
- Progressive Consent enabled by default (ENABLE_PROGRESSIVE_CONSENT=true)
- Client validation with pre-registered clients
- Audience separation framework

KNOWN ISSUE - Token Exchange Pattern Incorrect:
The current implementation does NOT properly implement token exchange.
MCP session tokens should be EXCHANGED for delegated Nextcloud tokens
during tool calls, not stored/reused. Critical corrections needed:

1. Session tokens: Flow 1 token → exchange → ephemeral Nextcloud token
   - Generated on-demand per tool call
   - Short-lived, not stored
   - Scopes limited to tool requirements

2. Background tokens: Flow 2 refresh token → background Nextcloud token
   - Only for offline/background jobs
   - Potentially different scopes than session tokens
   - Must NOT be used for MCP session tool calls

The token exchange mechanism needs to be implemented to properly
separate session-time delegation from background job authorization.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-03 20:33:55 +01:00
Chris CoutinhoandChris Coutinho 3b4606b798 build: Update submodule 2025-11-03 20:33:50 +01:00
Chris CoutinhoandChris Coutinho 63b457380a ci: exclude manual tests from CI test runs
Manual tests in tests/manual/ directory should not be run automatically in CI as they require manual interaction or are for debugging purposes only.
2025-11-03 20:33:49 +01:00
Chris CoutinhoandChris Coutinho b41bbd6c65 ci: Add condition service_healthy check for app to mcp containers 2025-11-03 20:33:38 +01:00
Chris Coutinho 54326f9c64 Remove patch for OIDC app 2025-10-20 15:50:11 +02:00
Chris Coutinho 6ba87e7e05 chore: update caldav ref 2025-10-20 11:52:29 +02:00
Chris Coutinho 8652684466 ci: [skip ci] Move oauth mcp tests to server subdir 2025-10-14 12:03:03 +02:00
Chris Coutinho 79e6250377 update deprecated log warnings 2025-09-24 00:17:57 +02:00
Chris Coutinho cc9650b077 refactor: Add tools for all resources to enable tool-only workflows 2025-09-24 00:13:24 +02:00
Chris Coutinho 3836534205 fix(client): Strip cookies from responses to avoid falsely raising CSRF errors 2025-08-08 21:03:16 +02:00
Chris Coutinho 1dfdad5fad Update README, docstrings, and test scope for temporary_addressbook 2025-08-03 14:42:16 +02:00
Chris Coutinho 72cb62a101 test(contacts): Add unit/integration tests for a few tools 2025-08-03 14:36:16 +02:00
Chris Coutinho 21fc55320b Fix scoping 2025-08-03 14:25:01 +02:00
Chris Coutinho ad3e288203 test: Replace test_*_clients with single nc_client for tests 2025-08-03 14:22:45 +02:00
Chris Coutinho 0a97357a9c remove main.py 2025-08-03 14:17:29 +02:00
Chris Coutinho 70f01bf40a Add files 2025-08-03 14:16:55 +02:00
Chris Coutinho 37b1057d2a feat(contacts): Initialize Contacts App 2025-08-03 14:15:37 +02:00
Chris Coutinho be466abc0c Update README for deployment 2025-08-01 12:36:52 +02:00
Chris Coutinho 8956945e9d chore: sort imports 2025-08-01 12:21:32 +02:00
Chris Coutinho a9f3e1b00d Remove app check 2025-08-01 12:16:11 +02:00
Chris Coutinho a5e3f949c2 Use unique calendar_test_client 2025-08-01 12:08:27 +02:00
Chris Coutinho 69fccb496a Use self._make_request 2025-08-01 11:05:28 +02:00
Chris Coutinho 6bdbb6ea6c Create sample calendar 2025-08-01 10:26:56 +02:00
Chris Coutinho 0b8a3aa646 Prepare calendar before running tests 2025-08-01 09:29:15 +02:00
Chris Coutinho ed270bb926 Add OCS-APIRequest: true to tables app check 2025-08-01 09:11:14 +02:00
Chris Coutinho 56e5298cce Wait for apps to be installed 2025-08-01 09:07:01 +02:00
Chris Coutinho 2bcfd3d7ee fix(calendar): Fix iCalendar date vs datetime format 2025-08-01 08:34:51 +02:00
Chris Coutinho 75235d6013 Refactor datetime 2025-07-31 14:51:33 +02:00
Chris Coutinho 19631838bb Merge remote-tracking branch 'origin/master' into refactor/server 2025-07-31 11:50:17 +02:00
Chris Coutinho b81fe6dfa0 fix(calendar): Remove try/except in calendar API 2025-07-30 11:03:01 +02:00
Chris Coutinho 2a5b12343c chore: pre-commit 2025-07-29 15:13:02 +02:00
Chris Coutinho 66d306708d test(calendar): Enable calendar app in CICD 2025-07-29 15:12:39 +02:00
Chris Coutinho e7598a5467 format 2025-07-29 15:00:23 +02:00
Chris Coutinho fb6aa954b6 chore: ruff check 2025-07-29 09:11:25 +02:00
Chris Coutinho 02ad283a01 chore: format 2025-07-29 09:09:10 +02:00
Chris Coutinho 13ba9ef2e6 Merge remote-tracking branch 'origin/master' into refactor/server 2025-07-29 09:08:17 +02:00
Chris Coutinho 4a8f9f7f7e chore: Update with "mergeConfidence:all-badges" 2025-06-26 09:43:59 +02:00