Files
fleet/frontend/interfaces/integration.ts
T
Lucas Manuel RodriguezandCopilot Autofix powered by AI 08d725889b Google Workspace IdP [5/6]: settings UI (#48168)
### 🥞 Stack (review/merge bottom-up)

1. #48164 — Activity types (FE+BE)
2. #48165 — Backend (cron + directory sync)
3. #48166 — Usage statistics
4. #48167 — fleetctl generate-gitops
5. **#48168 — Settings UI ⬅ this PR**

📄 Documentation is tracked separately in #48169 (targets
`docs-v4.89.0`).

---

## Summary

**PR 5 of 6.** **Settings UI**: the Google Workspace section in the IdP
providers card (`GoogleWorkspaceSection/`), interfaces, config mock, and
mutual-exclusion messaging with SCIM. Uses the new `notify` toast API.

> 🥞 **Stacked PR.** Base: `42915-gw-idp-vitals-4-gitops` (PR 4).

**Related issue:** Resolves #42915

# Checklist for submitter

- [ ] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
- [ ] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements).
- [ ] Timeouts are implemented and retries are limited to avoid infinite
loops.

## Testing

- [ ] Added/updated automated tests
- [ ] QA'd all new/changed functionality manually


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added a Google Workspace identity provider configuration section in
the Integrations area (domain, admin impersonation email, and API key
JSON).
* Added premium-tier gating so non-premium users see the upgrade message
and do not see the Google Workspace section.

* **Bug Fixes**
* Improved Google Workspace form validation and submission, including
safe masking of the saved API key JSON and proper disconnect when
clearing all fields.

* **Tests**
* Added tests covering premium visibility, Google Workspace rendering,
pre-filled configuration, and masked API key behavior.

* **Style**
* Updated Identity Providers and Google Workspace section layout styling
for consistent spacing and sizing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-06-29 13:47:48 -03:00

106 lines
3.1 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
export type IIntegrationType = "jira" | "zendesk";
export interface IJiraIntegration {
url: string;
username: string;
api_token: string;
project_key: string;
enable_failing_policies?: boolean;
enable_software_vulnerabilities?: boolean;
}
export interface IZendeskIntegration {
url: string;
email: string;
api_token: string;
group_id: number;
enable_failing_policies?: boolean;
enable_software_vulnerabilities?: boolean;
}
export interface IIntegration {
url: string;
username?: string;
email?: string;
api_token: string;
project_key?: string;
group_id?: number;
enable_failing_policies?: boolean;
enable_software_vulnerabilities?: boolean;
originalIndex?: number;
type?: IIntegrationType;
tableIndex?: number;
dropdownIndex?: number;
name?: string;
}
export interface IIntegrationFormData {
url: string;
username?: string;
email?: string;
apiToken: string;
projectKey?: string;
groupId?: number;
enableSoftwareVulnerabilities?: boolean;
}
export interface IIntegrationTableData extends IIntegrationFormData {
originalIndex: number;
type: IIntegrationType;
tableIndex?: number;
name: string;
}
export interface IIntegrationFormErrors {
url?: string | null;
email?: string | null;
username?: string | null;
apiToken?: string | null;
groupId?: number | null;
projectKey?: string | null;
enableSoftwareVulnerabilities?: boolean;
}
export interface IGlobalCalendarIntegration {
domain: string;
api_key_json: Record<string, string>;
}
interface ITeamCalendarSettings {
enable_calendar_events: boolean;
webhook_url: string;
}
// zendesk and jira fields are coupled if one is present, the other needs to be present. If
// one is present and the other is null/missing, the other will be nullified. google_calendar is
// separated it can be present without the other 2 without nullifying them.
// TODO: Update these types to reflect this.
export interface IZendeskJiraIntegrations {
zendesk: IZendeskIntegration[];
jira: IJiraIntegration[];
}
// Google Workspace IdP integration: syncs IdP host vitals (users, groups,
// departments) from Google Workspace via the Admin SDK Directory API using a
// service account with domain-wide delegation. Mutually exclusive with SCIM.
export interface IGlobalGoogleWorkspaceIntegration {
domain: string;
impersonated_user_email: string;
api_key_json: Record<string, string>;
}
// reality is that IZendeskJiraIntegrations are optional should be something like `extends
// Partial<IZendeskJiraIntegrations>`, but that leads to a mess of types to resolve.
export interface IGlobalIntegrations extends IZendeskJiraIntegrations {
google_calendar?: IGlobalCalendarIntegration[] | null;
google_workspace?: IGlobalGoogleWorkspaceIntegration[];
// whether or not conditional access is enabled for "No team"
conditional_access_enabled?: boolean;
}
export interface ITeamIntegrations extends IZendeskJiraIntegrations {
google_calendar?: ITeamCalendarSettings | null;
// whether or not conditional access is enabled for each team other than "No team" (see `IGlobalIntegrations.conditional_access_enabled`)
conditional_access_enabled?: boolean;
}