fleet/frontend/interfaces/host.ts
Dante Catalfamo 40f6546de7
Add conditional access already bypassed check (#39037)
**Related issue:** Resolves #37281
2026-02-02 10:35:55 -05:00

338 lines
9.3 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.

import PropTypes from "prop-types";
import hostPolicyInterface, { IHostPolicy } from "./policy";
import hostUserInterface, { IHostUser } from "./host_users";
import labelInterface, { ILabel } from "./label";
import packInterface, { IPack } from "./pack";
import softwareInterface, { ISoftware } from "./software";
import hostQueryResult from "./campaign";
import queryStatsInterface, { IQueryStats } from "./query_stats";
import { ILicense, IDeviceGlobalConfig } from "./config";
import {
IHostMdmProfile,
MdmEnrollmentStatus,
BootstrapPackageStatus,
DiskEncryptionStatus,
} from "./mdm";
import { HostPlatform } from "./platform";
export default PropTypes.shape({
created_at: PropTypes.string,
updated_at: PropTypes.string,
id: PropTypes.number,
detail_updated_at: PropTypes.string,
last_restarted_at: PropTypes.string,
label_updated_at: PropTypes.string,
policy_updated_at: PropTypes.string,
last_enrolled_at: PropTypes.string,
seen_time: PropTypes.string,
refetch_requested: PropTypes.bool,
hostname: PropTypes.string,
uuid: PropTypes.string,
platform: PropTypes.string,
osquery_version: PropTypes.string,
orbit_version: PropTypes.string,
fleet_desktop_version: PropTypes.string,
os_version: PropTypes.string,
build: PropTypes.string,
platform_like: PropTypes.string,
code_name: PropTypes.string,
uptime: PropTypes.number,
memory: PropTypes.number,
cpu_type: PropTypes.string,
cpu_subtype: PropTypes.string,
cpu_brand: PropTypes.string,
cpu_physical_cores: PropTypes.number,
cpu_logical_cores: PropTypes.number,
hardware_vendor: PropTypes.string,
hardware_model: PropTypes.string,
hardware_version: PropTypes.string,
hardware_serial: PropTypes.string,
computer_name: PropTypes.string,
primary_ip: PropTypes.string,
primary_mac: PropTypes.string,
distributed_interval: PropTypes.number,
config_tls_refresh: PropTypes.number,
logger_tls_period: PropTypes.number,
team_id: PropTypes.number,
pack_stats: PropTypes.arrayOf(
PropTypes.shape({
pack_id: PropTypes.number,
pack_name: PropTypes.string,
query_stats: PropTypes.arrayOf(queryStatsInterface),
})
),
team_name: PropTypes.string,
additional: PropTypes.object, // eslint-disable-line react/forbid-prop-types
percent_disk_space_available: PropTypes.number,
gigs_disk_space_available: PropTypes.number,
// On Linux hosts, `gigs_total_disk_space` only includes disk space from the "/" partition
gigs_total_disk_space: PropTypes.number,
// `gigs_all_disk_space` includes disk space from all partitions
gigs_all_disk_space: PropTypes.number,
labels: PropTypes.arrayOf(labelInterface),
packs: PropTypes.arrayOf(packInterface),
software: PropTypes.arrayOf(softwareInterface),
status: PropTypes.string,
display_name: PropTypes.string,
users: PropTypes.arrayOf(hostUserInterface),
policies: PropTypes.arrayOf(hostPolicyInterface),
query_results: PropTypes.arrayOf(hostQueryResult),
batteries: PropTypes.arrayOf(
PropTypes.shape({
cycle_count: PropTypes.number,
health: PropTypes.string,
})
),
});
export type HostStatus = "online" | "offline" | "new" | "missing";
export interface IDeviceUser {
email: string;
source: string;
}
export interface IMunkiData {
version: string;
}
export type MacDiskEncryptionActionRequired = "log_out" | "rotate_key";
export type HostAndroidCertStatus =
| "verified"
| "failed"
// all below display "pending" in UI
| "pending"
| "delivering"
| "delivered";
export interface IHostAndroidCert {
name: string;
status: HostAndroidCertStatus;
operation_type: "install" | "remove";
detail: string;
}
export interface IOSSettings {
disk_encryption: {
status: DiskEncryptionStatus | null;
detail: string;
};
certificates: IHostAndroidCert[];
}
interface IMdmMacOsSettings {
disk_encryption: DiskEncryptionStatus | null;
action_required: MacDiskEncryptionActionRequired | null;
}
interface IMdmMacOsSetup {
bootstrap_package_status: BootstrapPackageStatus | "";
details: string;
bootstrap_package_name: string;
}
export type HostMdmDeviceStatus = "unlocked" | "locked" | "wiped";
export type HostMdmPendingAction = "unlock" | "lock" | "wipe" | "location" | "";
export interface IHostMdmData {
encryption_key_available: boolean;
/**
* encryption_key_archived indicates where there is any archived key for the host. It is only
* populated for GET /hosts/:id and GET /hosts/identifiers/:identifier endpoints. It is not
* populated for list hosts or other hosts endpoints.
*/
encryption_key_archived?: boolean;
enrollment_status: MdmEnrollmentStatus | null;
dep_profile_error?: boolean;
name?: string;
id?: number;
server_url: string | null;
profiles: IHostMdmProfile[] | null;
os_settings?: IOSSettings;
macos_settings?: IMdmMacOsSettings;
macos_setup?: IMdmMacOsSetup;
device_status: HostMdmDeviceStatus;
pending_action: HostMdmPendingAction;
connected_to_fleet?: boolean;
}
export interface IHostMaintenanceWindow {
starts_at: string; // e.g. "2024-06-18T13:27:1807:00"
timezone: string | null; // e.g. "America/Los_Angeles"
}
export interface IMunkiIssue {
id: number;
name: string;
type: "error" | "warning";
created_at: string;
}
interface IMacadminMDMData {
enrollment_status: MdmEnrollmentStatus | null;
name?: string;
server_url: string | null;
id?: number;
}
export interface IMacadminsResponse {
macadmins: null | {
munki: null | IMunkiData;
mobile_device_management: null | IMacadminMDMData;
munki_issues: IMunkiIssue[];
};
}
export interface IPackStats {
pack_id: number;
pack_name: string;
query_stats: IQueryStats[];
type: string;
}
export interface IPolicyHostResponse {
id: number;
display_name: string;
query_results?: unknown[];
status?: string;
}
export interface IGeoLocation {
country_iso: string;
city_name: string;
geometry?: {
type: string;
coordinates: number[];
};
}
interface IBattery {
cycle_count: number;
health: string;
}
export interface IHostResponse {
host: IHost;
}
export interface IDeviceUserResponse {
host: IHostDevice;
license: ILicense;
org_logo_url: string;
org_logo_url_light_background: string;
org_contact_url: string;
disk_encryption_enabled?: boolean;
platform?: HostPlatform;
global_config: IDeviceGlobalConfig;
self_service: boolean;
}
export interface IHostEncrpytionKeyResponse {
host_id: number;
encryption_key: {
updated_at: string;
key: string;
};
}
export interface IHostIssues {
total_issues_count: number;
critical_vulnerabilities_count?: number; // Premium
failing_policies_count: number;
}
export interface IHostEndUser {
idp_id?: string;
idp_username?: string;
idp_full_name?: string;
idp_info_updated_at: string | null;
idp_groups?: string[];
idp_department?: string;
other_emails?: Array<{
email: string;
source: string;
}>;
}
export interface IHost {
created_at: string;
updated_at: string;
software_updated_at?: string;
id: number;
detail_updated_at: string;
last_restarted_at: string;
label_updated_at: string;
policy_updated_at: string;
last_enrolled_at: string;
seen_time: string;
refetch_requested: boolean;
refetch_critical_queries_until: string | null;
hostname: string;
uuid: string;
platform: HostPlatform;
osquery_version: string;
orbit_version: string | null;
fleet_desktop_version: string | null;
os_version: string;
build: string;
platform_like: string; // TODO: replace with more specific union type
code_name: string;
uptime: number;
memory: number;
cpu_type: string;
cpu_subtype: string;
cpu_brand: string;
cpu_physical_cores: number;
cpu_logical_cores: number;
hardware_vendor: string;
hardware_model: string;
hardware_version: string;
hardware_serial: string;
computer_name: string;
public_ip: string;
primary_ip: string;
primary_mac: string;
distributed_interval: number;
config_tls_refresh: number;
logger_tls_period: number;
team_id: number | null;
pack_stats: IPackStats[] | null;
team_name: string | null;
additional?: object; // eslint-disable-line @typescript-eslint/ban-types
percent_disk_space_available: number;
gigs_disk_space_available: number;
// On Linux hosts, `gigs_total_disk_space` only includes disk space from the "/" partition
gigs_total_disk_space?: number;
// `gigs_all_disk_space` includes disk space from all partitions
gigs_all_disk_space?: number;
labels: ILabel[];
packs: IPack[];
software?: ISoftware[];
issues: IHostIssues;
status: HostStatus;
display_text: string;
display_name: string;
target_type?: string;
scripts_enabled: boolean | null;
users: IHostUser[];
device_users?: IDeviceUser[];
munki?: IMunkiData;
maintenance_window?: IHostMaintenanceWindow;
mdm: IHostMdmData;
policies: IHostPolicy[];
query_results?: unknown[];
geolocation?: IGeoLocation;
batteries?: IBattery[];
disk_encryption_enabled?: boolean;
device_mapping: IDeviceUser[] | null;
/** There will be at most 1 end user */
end_users?: IHostEndUser[];
conditional_access_bypassed: boolean;
}
/*
* IHostDevice is an extension of IHost that is returned by the /devices endpoint. It includes the
* dep_assigned_to_fleet field, which is not returned by the /hosts endpoint.
*/
export interface IHostDevice extends IHost {
dep_assigned_to_fleet: boolean;
}