fleet/frontend/interfaces/integration.ts
Gabriel Hernandez 007cdc9efa
fixes for editing certificate authorities in UI. (#27583)
For #27581, #27584, #27612

contains a couple of fixes with editing CAs in UI:

- fix for only removing API token, password, or challenge inputs when
the user has not yet made a change to those fields.
- fix for sending empty array when UPN input is empty
- fix for error for private key
- fix when editing a digicert CA when UPN is set from gitops and is null

- [x] Manual QA for all new/changed functionality
2025-03-28 15:22:21 +00:00

154 lines
4.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 ICertificatesIntegrationNDES {
url: string;
admin_url: string;
username: string;
password: string;
}
export interface ICertificatesIntegrationDigicert {
name: string;
url: string;
api_token: string;
profile_id: string;
certificate_common_name: string;
certificate_user_principal_names: string[] | null;
certificate_seat_id: string;
}
export interface ICertificatesIntegrationCustomSCEP {
name: string;
url: string;
challenge: string;
}
export const isNDESCertIntegration = (
integration: ICertificateIntegration
): integration is ICertificatesIntegrationNDES => {
return (
"admin_url" in integration &&
"username" in integration &&
"password" in integration
);
};
export const isDigicertCertIntegration = (
integration: ICertificateIntegration
): integration is ICertificatesIntegrationDigicert => {
return (
"profile_id" in integration &&
"certificate_common_name" in integration &&
"certificate_user_principal_names" in integration &&
"certificate_seat_id" in integration
);
};
export const isCustomSCEPCertIntegration = (
integration: ICertificateIntegration
): integration is ICertificatesIntegrationCustomSCEP => {
return (
"name" in integration && "url" in integration && "challenge" in integration
);
};
export type ICertificateAuthorityType = "ndes" | "digicert" | "custom";
/** all the types of certificate integrations */
export type ICertificateIntegration =
| ICertificatesIntegrationNDES
| ICertificatesIntegrationDigicert
| ICertificatesIntegrationCustomSCEP;
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: 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[];
}
// 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;
ndes_scep_proxy?: ICertificatesIntegrationNDES | null;
digicert?: ICertificatesIntegrationDigicert[];
custom_scep_proxy?: ICertificatesIntegrationCustomSCEP[];
}
export interface ITeamIntegrations extends IZendeskJiraIntegrations {
google_calendar?: ITeamCalendarSettings | null;
}