From c4042886fc9fa2b1d980b037cdb24fa63c338dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Thu, 20 Aug 2026 23:15:36 +0000 Subject: [PATCH] api keys live in profile, not integrations MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reported by the owner, who went looking for them in user management and then in profile, and found them in neither. They were under Integrations. A key is not an integration with anything. It is a second way to present the authority the account already has, and the permission registry already says exactly that: `/api-keys` is `core`, sitting beside `/user` and `/dock`, with the comment "a key is not new authority". Profile, next to the password it stands in for, is where somebody looks. Moved rather than duplicated, and the route moves with it — /settings/profile/api-keys. Nothing linked to the old path, so there is no redirect to keep. Co-Authored-By: Claude Opus 5 --- .../Settings/IntegrationsSettings/index.tsx | 8 -------- .../ApiKeys.tsx | 0 .../Dashboard/Settings/ProfileSettings/index.tsx | 14 +++++++++++++- 3 files changed, 13 insertions(+), 9 deletions(-) rename src/apps/officer-web/Screens/Dashboard/Settings/{IntegrationsSettings => ProfileSettings}/ApiKeys.tsx (100%) diff --git a/src/apps/officer-web/Screens/Dashboard/Settings/IntegrationsSettings/index.tsx b/src/apps/officer-web/Screens/Dashboard/Settings/IntegrationsSettings/index.tsx index b4249bce..bdd39670 100644 --- a/src/apps/officer-web/Screens/Dashboard/Settings/IntegrationsSettings/index.tsx +++ b/src/apps/officer-web/Screens/Dashboard/Settings/IntegrationsSettings/index.tsx @@ -11,7 +11,6 @@ import { GoogleOAuthConfig } from './GoogleOAuthConfig'; import { BrowserRelay } from './BrowserRelay'; import { ApifyConfig } from './ApifyConfig'; import { DavAppPasswords } from './DavAppPasswords'; -import { ApiKeys } from './ApiKeys'; const BASE_PATH = '/settings/integrations'; @@ -51,13 +50,6 @@ const personalSections: SettingsSection[] = [ description: 'Per-device passwords for CalDAV/CardDAV clients', content: , }, - { - key: 'api-keys', - icon: KeyRound, - title: 'API keys', - description: 'Per-app keys that sign in as you, revocable one at a time', - content: , - }, { key: 'browser-relay', icon: Globe, diff --git a/src/apps/officer-web/Screens/Dashboard/Settings/IntegrationsSettings/ApiKeys.tsx b/src/apps/officer-web/Screens/Dashboard/Settings/ProfileSettings/ApiKeys.tsx similarity index 100% rename from src/apps/officer-web/Screens/Dashboard/Settings/IntegrationsSettings/ApiKeys.tsx rename to src/apps/officer-web/Screens/Dashboard/Settings/ProfileSettings/ApiKeys.tsx diff --git a/src/apps/officer-web/Screens/Dashboard/Settings/ProfileSettings/index.tsx b/src/apps/officer-web/Screens/Dashboard/Settings/ProfileSettings/index.tsx index 0d3b2a7a..b69c3611 100644 --- a/src/apps/officer-web/Screens/Dashboard/Settings/ProfileSettings/index.tsx +++ b/src/apps/officer-web/Screens/Dashboard/Settings/ProfileSettings/index.tsx @@ -1,11 +1,12 @@ import { useMemo } from 'react'; -import { User, Lock, Globe, LayoutGrid, Volume2 } from 'lucide-react'; +import { User, Lock, Globe, KeyRound, LayoutGrid, Volume2 } from 'lucide-react'; import type { LayoutNode, PanelComponents } from 'officerdev'; import { WorkspaceLayout } from 'officerdev'; import { SettingsRoute, createSettingsPanelComponents, type SettingsSection } from '../SettingsPanel'; import { UserData } from './UserData'; import { ChangePassword } from './ChangePassword'; +import { ApiKeys } from './ApiKeys'; import { Languages } from './Languages'; import { DockSettings } from './DockSettings'; import { VoicePreference } from './VoicePreference'; @@ -21,6 +22,17 @@ const sections: SettingsSection[] = [ description: 'Update your password', content: , }, + // Beside the password rather than under Integrations, where it was until 2026-08-21. A key is not an + // integration with anything — it is a second way to present the authority this account already has, and + // the permission registry says so: `/api-keys` is `core`, sitting with `/user` and `/dock`. Somebody + // looking for it went to user management and then to profile, which is where it should have been. + { + key: 'api-keys', + icon: KeyRound, + title: 'API keys', + description: 'Per-app keys that sign in as you, revocable one at a time', + content: , + }, { key: 'languages', icon: Globe,