473 Commits

Author SHA1 Message Date
Manoj Bajaj 2e7d2f6dae feat: add bundled providers for Jira, Confluence, YouTube, Vertex AI, Todoist, Cloudflare, Outlook, Word, Calendar, and Zoom
Adds 10 new provider definitions:
- jira/confluence: dedicated Atlassian OAuth 3LO providers with
  service-specific scopes, distinct from the generic atlassian provider
- google-youtube: YouTube Data API v3 with full youtube scope
- google-vertex-ai: Vertex AI / Cloud Platform scope
- todoist: API key flow via app.todoist.com/oauth with PKCE
- cloudflare: API token (api_key flow) via Authorization: Bearer
- microsoft-outlook: Graph mail scopes (Mail.ReadWrite, Mail.Send)
- microsoft-word: Graph files scopes (Files.ReadWrite.All, Sites.ReadWrite.All)
- microsoft-calendar: Graph calendar scopes (Calendars.ReadWrite)
- zoom: PKCE + device code; granular meeting/user/recording scopes

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 10:09:51 +05:30
Manoj Bajaj 0a88fef824 feat: add bundled providers for 14 Google Workspace and API services
Adds OAuth2/PKCE provider definitions for Gmail, Drive, Calendar, Chat,
Admin SDK, Analytics, Classroom, Docs, Forms, Meet, Photos, Search
Console, Sheets, Slides, and Tasks. Each uses the standard Google
authorization and token endpoints with service-specific API scopes.
The generic google provider is unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 10:00:39 +05:30
Manoj Bajaj 3a7a7b8aea feat: Improve UI 2026-06-09 09:45:23 +05:30
Manoj Bajaj 654e8f7441 Merge remote-tracking branch 'origin/chore/reddit' into feat/fixes-v6.2 2026-06-09 09:12:44 +05:30
Manoj Bajaj 27779eb003 Merge remote-tracking branch 'origin/feat/client-secret-handling' into feat/fixes-v6.2 2026-06-09 09:07:33 +05:30
Manoj Bajaj 6fe11073c8 feat: Fix failing tests 2026-06-09 09:06:58 +05:30
Manoj Bajaj 573f128f1d Merge branch 'main' into feature/provider-connection-details-pages 2026-06-09 08:36:08 +05:30
Ankit Ranjan 3b7b175b70 feat: add required field support to InputField and update UI components to respect optionality 2026-06-08 22:52:21 +05:30
Ankit Ranjan 2d66ac96ab feat: add Reddit OAuth2 bundled provider 2026-06-08 22:36:02 +05:30
beubax b3bceaeae9 feat: add client_secret_handling support for basic auth and update OAuth flows accordingly 2026-06-08 17:58:40 +05:30
beubax 73c58437b6 feat: enable admin browser sessions for provider revocation and add error handling to UI button 2026-06-08 16:17:41 +05:30
beubax 11d2166109 feat: implement provider and connection detail endpoints with UI support for configuration management and status monitoring 2026-06-08 15:57:50 +05:30
Manoj Bajaj 9ee46a651e fix: remove populate_by_name and redundant validation_alias from settings
populate_by_name=True on BaseSettings caused pydantic-settings to look up
the field name 'home' as an env var, picking up the system HOME variable
instead of the default ~/.authsome.

The validation aliases on home, base_url, and active_identity were redundant
with env_prefix="AUTHSOME_", which already maps field names to the correct
AUTHSOME_* env vars. Removing them eliminates the need for populate_by_name
entirely.

ClientConfig.save now excludes inherited settings fields (home, base_url,
version) from the persisted JSON — those are operational settings, not
client-local state.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-05 12:55:58 +05:30
Manoj Bajaj ad23d60754 feat: Simplify identity portability 2026-06-05 12:23:32 +05:30
Manoj Bajaj a033bfe93f chore: satisfy pylint ruff checks 2026-06-04 22:22:50 +05:30
Manoj Bajaj 10f6e8ae41 fix: Remove type checking hacks 2026-06-04 21:28:22 +05:30
Manoj Bajaj 33e13f9625 feat: Add logos and description for all bundled providers 2026-06-04 20:10:04 +05:30
Manoj Bajaj 3ce646469a refactor: metadata doesnt need separate file 2026-06-04 19:34:15 +05:30
Manoj Bajaj cf95c6c5da fix: inherit ServerConfig from AuthsomeConfig for consistent home resolution
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 18:59:05 +05:30
Manoj Bajaj 3aab2fbd48 chore: run ruff lint 2026-06-04 16:14:00 +05:30
Manoj Bajaj 7faf61f9d8 fix: allow explicit authsome config home 2026-06-04 16:13:01 +05:30
Manoj Bajaj b96d593883 fix: resolve pre-commit failures 2026-06-04 11:50:56 +05:30
Manoj Bajaj f661d8d360 feature!: Cleaner architechture, multi server compatible identities and cleaner ui 2026-06-03 15:34:55 +05:30
Manoj Bajaj 668f91a54a fix: cache identity registration per daemon 2026-06-03 15:26:33 +05:30
Manoj Bajaj 635285a565 feat: add provider dashboard metadata 2026-06-03 15:17:43 +05:30
Manoj Bajaj 52fe7dc5c3 fix: move dashboard auth flow to Next routes 2026-06-03 14:49:56 +05:30
Manoj Bajaj 7c46cd895d Merge pull request #369 from agentrhq/feature/nextjs-static-ui
feat: add static Next.js dashboard
2026-06-02 16:37:12 +05:30
Manoj Bajaj 98a3351c56 feat: replace Python dashboard fallback with built Next.js static UI
- Build Next.js app and populate src/authsome/ui/web/ so GET / is served
  from the static bundle rather than a Python f-string page
- Apply DESIGN.md (Deep Emerald + Obsidian, dark-first) to the Next.js
  app: update globals.css tokens, switch fonts to Hanken Grotesk +
  JetBrains Mono, add dark class to <html>, replace all hardcoded
  bg-white/bg-slate-* with semantic CSS-variable classes
- Redesign Python interstitial pages (claim, device-code, OAuth input,
  error) using the same DESIGN.md tokens in web_theme.py
- Remove Python GET / route and dashboard_page() — Next.js AuthGate
  handles unauthenticated state; no Python fallback needed
- Remove the GET / special-case from _resolve_ui_auth
- Move DESIGN.md to ui/ (the Next.js root, the correct home)
- Delete test_ui_sessions.py and test_ui_dashboard.py; server-rendered
  dashboard UI no longer exists as Python code

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-02 16:18:55 +05:30
Manoj Bajaj 96fd514adb feat: improve scan to cover all typical env file locations
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Entire-Checkpoint: 22e75bff4998
2026-06-02 02:14:00 +05:30
Manoj Bajaj e69508552f Merge remote-tracking branch 'origin/main' into feature/nextjs-static-ui
# Conflicts:
#	src/authsome/server/routes/audit.py
#	src/authsome/server/routes/connections.py
#	src/authsome/server/routes/health.py
#	src/authsome/server/routes/ui.py
2026-06-01 19:24:29 +05:30
Manoj Bajaj 29bb29a388 refactor: remove legacy dashboard routes
Delete the server-rendered dashboard pages, remove the static asset mount, and route the Next dashboard provider login form through the browser-session auth path.
2026-06-01 16:04:36 +05:30
Manoj Bajaj e0a2cd9158 feat: add static Next.js dashboard
Mount the exported dashboard at the daemon root, build it into the Python package, and use existing daemon endpoints for SWR data fetching.
2026-06-01 15:43:15 +05:30
Manoj Bajaj e9498bbe82 refactor: clarify server dependency ownership boundaries
Split get_protected_auth_service into verify_pop_caller (caller
identification: PoP JWT validation, registration check, ownership
resolution) and get_protected_auth_service (service construction only).
Each layer now has a single responsibility; FastAPI caches
verify_pop_caller per request so the work is not duplicated.

Add OwnershipResolver.resolve_for_principal so both resolution paths
(identity-based CLI and principal-based UI) go through the ownership
resolver rather than inline registry lookups.

Remove four redundant app.state aliases (identity_registry,
vault_registry, identity_claim_registry, principal_vault_binding_registry)
that shadowed app.state.store.* and caused inconsistent access patterns.
All callers now use app.state.store.* directly.

Change get_admin_auth_service to use Depends(get_protected_auth_service)
instead of calling it directly, and fix resolve_ui_request_identity
return type (str | None → None; it never returned non-None).

Closes #354

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Entire-Checkpoint: eda543e8686c
2026-06-01 14:48:36 +05:30
Manoj Bajaj 3a6e7e5231 refactor: Simplify server logic for clear reparation, reduce slop
Entire-Checkpoint: 34c348b255f6
2026-05-31 01:41:05 +05:30
beubax c42da7293a refactor: replace audit log file with SQLite-backed audit storage and rename hosted session components to browser sessions 2026-05-29 15:28:47 +05:30
beubax 0bca800339 refactor: reorder import statements and remove unused deployment_mode parameter from route dependencies 2026-05-29 13:52:04 +05:30
Tejas e4a17790f7 Merge branch 'main' into feature/orthogonal-authsome-modules 2026-05-29 13:51:07 +05:30
Manoj Bajaj 1bc504472a feat: add admin audit dashboard 2026-05-29 13:40:25 +05:30
beubax 7d43b567c8 feat: add principal_role parameter to AuthService and dependency injection routes 2026-05-29 13:30:34 +05:30
Tejas a3e52688ad Merge branch 'main' into feature/orthogonal-authsome-modules 2026-05-29 13:22:28 +05:30
Manoj Bajaj 63bd4c90aa refactor!: unify local and hosted into a single deployment flow
The daemon branched on AUTHSOME_DEPLOYMENT_MODE and ran two parallel
implementations of nearly every ownership concept. "Local and hosted
behave the same" was asserted in prose (ADR 0006) but never enforced in
code, so the paths were free to drift, and the synthetic local principal
let a second local identity silently inherit the admin principal.

Collapse to one flow, identical for every deployment: authsome init
registers an identity and gets back a browser claim URL; the user
registers email+password (first principal becomes admin); that principal
confirms the claim; PoP calls are then authorized.

- Remove AUTHSOME_DEPLOYMENT_MODE, get_deployment_mode(),
  LOCAL_PRINCIPAL_EMAIL, the Local*/Hosted* resolver and bootstrap
  classes, and the AuthService(deployment_mode=...) parameter.
- OwnershipResolver and IdentityBootstrapService become single concrete
  classes (the former hosted, claim-based implementations).
- Admin gating is purely role-based: non-admin principals are blocked in
  every deployment (previously implicitly allowed in local mode).
- The server UI always requires a hosted browser session; remove the
  vestigial HealthResponse.mode field.
- CLI ensure_identity_ready was already mode-agnostic; it now prints the
  claim URL to stderr for headless use.

Add ADR 0007 recording the decision; amend ADR 0006 and CONTEXT.md.

BREAKING CHANGE: existing local installs have an unclaimed identity under
local@authsome.internal and are rejected until the user registers a
principal (email+password) and claims the identity.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Entire-Checkpoint: d31cf246f6f2
2026-05-29 13:18:41 +05:30
Manoj Bajaj 950371088b Merge pull request #346 from agentrhq/feature/improve-admin-role-policy
feat: implement audit events and principal roles
2026-05-29 12:29:47 +05:30
beubax fbdf580cd6 refactor: introduce CredentialRepository and ProviderRepository to centralize storage and management logic; move functions into their respective domains 2026-05-28 18:30:14 +05:30
Manoj Bajaj 0ed077b9df feat: implement audit events and principal roles
Implement ADR 005 by routing audit events through OpenTelemetry with a server-owned SQLite exporter and query endpoint. Implement ADR 006 by persisting principal roles, assigning first principal admin, and enforcing admin-only routes at the FastAPI dependency layer.

Entire-Checkpoint: df60966364f1
2026-05-28 15:13:56 +05:30
Tejas 6c108cb44f revert: display input fields for dcr providers
Refactor existing_provider_client check and input_fields assignment.
2026-05-28 12:16:49 +05:30
Ankit Ranjan 475bdebf81 refactor: trigger login flow directly when existing DCR PKCE provider client is present 2026-05-27 17:51:36 +05:30
Ankit Ranjan 595de28f25 fix: refresh DCR provider client on replace 2026-05-27 17:39:45 +05:30
beubax 54ba227341 refactor: move server secret resolution out of vault 2026-05-27 16:42:18 +05:30
beubax 52c8c2aec6 refactor: simplify create_vault dependency and remove unused server store tests 2026-05-27 16:18:51 +05:30
beubax 3ac75aa74a refactor: remove server config dependency from vault initialization 2026-05-27 16:09:57 +05:30