use serde_json::Value;
use crate::Secret;
use crate::model;
use crate::models::KnownValues;
pub const LOG_TYPES: &[&str] = &["configuration", "network"];
pub const DESTINATION_TYPES: &[&str] = &[
"splunk",
"elastic",
"panther",
"cribl",
"crowdstrike",
"datadog",
"axiom",
"s3",
];
pub const COMPRESSION_FORMATS: &[&str] = &["zstd", "gzip", "none"];
pub const S3_AUTHENTICATION_TYPES: &[&str] = &["accesskey", "rolearn"];
pub const AUDIT_LOG_TYPES: &[&str] = &["CONFIG"];
pub const AUDIT_ORIGINS: &[&str] = &[
"ADMIN_CONSOLE",
"CONFIG_API",
"CONTROL",
"IDENTITY_PROVIDER",
"NODE",
"SUPPORT_REQUEST",
"STRIPE",
"SECURITY_NOTIFICATION",
"LEGAL_NOTIFICATION",
"BORDER0_API",
];
pub const AUDIT_ACTOR_TYPES: &[&str] = &[
"USER",
"NODE",
"AUTOMATED_WORKER",
"OAUTH_CLIENT",
"SCIM",
"MULLVAD",
"LOGSTREAM",
"SECRET_SCANNER",
"PAM_CONNECTOR",
"PAM_SERVICE_ACCOUNT",
];
pub const AUDIT_TARGET_TYPES: &[&str] = &[
"TAILNET",
"USER",
"GROUP",
"NODE",
"API_KEY",
"INVITE",
"SHARE",
"BILLING",
"ADMIN_CONSOLE",
"WEB_INTERFACE",
"WEBHOOK_ENDPOINT",
"FAILED_REQUEST",
];
pub const AUDIT_TARGET_PROPERTIES: &[&str] = &[
"ACL",
"ACL_TAGS",
"ACCOUNT_EMAIL",
"ADDRESS",
"ALLOWED_IPS",
"AUTO_APPROVED_ROUTES",
"ATTRIBUTES",
"BILLING_OWNER",
"COLLECT_SERVICES",
"COLLECT_POSTURE_IDENTITY",
"MULLVAD_VPN",
"DNS_CONFIG",
"EMAIL",
"EXIT_NODE",
"FEATURE",
"FILE_SHARING",
"HTTPS",
"KEY_EXPIRY_TIME",
"KEY_EXPIRY",
"LOG_EXIT_FLOWS",
"LOGSTREAM_ENDPOINT",
"MAGIC_DNS",
"MACHINE_AUTH_NEEDED",
"MACHINE_APPROVAL_NEEDED",
"USER_APPROVAL_REQUIRED",
"MACHINE_NAME",
"MAX_KEY_DURATION",
"NETWORK_FLOW_LOGGING",
"GEOSTEERING",
"NODE_SHARE",
"TAILNET_INVITE",
"PAYMENT_INFO",
"POSTURE_IDENTITY",
"POSTURE_INTEGRATION",
"USER_ROLE",
"SCIM",
"SECURITY_EMAIL",
"STRIPE_CUSTOMER_ID",
"SUBSCRIPTION",
"SUBSCRIBED_EVENTS",
"SUPPORT_EMAIL",
"SECRET",
"TCD",
"TKA",
"AUTH_PROVIDER",
];
pub const AUDIT_ACTIONS: &[&str] = &[
"LOGIN",
"LOGOUT",
"CREATE",
"UPDATE",
"DELETE",
"CANCEL",
"REVOKE",
"APPROVE",
"SUSPEND",
"RESTORE",
"ENABLE",
"DISABLE",
"ACCEPT",
"EXPIRED",
"PUSH_USER",
"PUSH_GROUP",
"VERIFY",
"JOIN_WAITLIST",
"INVITE",
"JOIN",
"LEAVE",
"RESEND",
"MIGRATE_AUTH_PROVIDER",
];
pub const FLOW_PROTOCOLS: &[&str] = &[
"ah",
"dccp",
"egp",
"esp",
"gre",
"icmp",
"igmp",
"igp",
"ipv4",
"ipv6-icmp",
"sctp",
"tcp",
"udp",
];
pub const AUDIT_EVENTS: &[&str] = &[
"ADMIN_CONSOLE.LOGIN", "ADMIN_CONSOLE.LOGOUT", "API_KEY.CREATE", "API_KEY.EXPIRED",
"API_KEY.REVOKE", "BILLING.CANCEL.SUBSCRIPTION", "BILLING.CREATE.SUBSCRIPTION",
"BILLING.UPDATE.ADDRESS", "BILLING.UPDATE.BILLING_OWNER", "BILLING.UPDATE.EMAIL",
"BILLING.UPDATE.PAYMENT_INFO", "BILLING.UPDATE.STRIPE_CUSTOMER_ID",
"BILLING.UPDATE.SUBSCRIPTION", "FAILED_REQUEST.UPDATE", "GROUP.PUSH_GROUP.ATTRIBUTES",
"GROUP.UPDATE.USER_ROLE",
"INVITE.ACCEPT.FEATURE", "INVITE.ACCEPT.NODE_SHARE", "INVITE.ACCEPT.TAILNET_INVITE",
"INVITE.CREATE.FEATURE", "INVITE.CREATE.NODE_SHARE", "INVITE.CREATE.TAILNET_INVITE",
"INVITE.DELETE.NODE_SHARE", "INVITE.DELETE.TAILNET_INVITE", "INVITE.RESEND.NODE_SHARE",
"INVITE.RESEND.TAILNET_INVITE", "NODE.APPROVE", "NODE.CREATE", "NODE.CREATE.ATTRIBUTES",
"NODE.DELETE", "NODE.DELETE.ATTRIBUTES", "NODE.DISABLE.KEY_EXPIRY",
"NODE.DISCONNECT_NODE.CLIENT_LOG", "NODE.ENABLE.KEY_EXPIRY",
"NODE.EXPIRED.KEY_EXPIRY_TIME", "NODE.LOGIN", "NODE.LOGOUT", "NODE.REVOKE",
"NODE.UPDATE.ACL_TAGS", "NODE.UPDATE.ALLOWED_IPS", "NODE.UPDATE.ATTRIBUTES",
"NODE.UPDATE.AUTO_APPROVED_ROUTES", "NODE.UPDATE.EXIT_NODE",
"NODE.UPDATE.KEY_EXPIRY_TIME", "NODE.UPDATE.MACHINE_NAME",
"NODE.UPDATE.POSTURE_IDENTITY", "NODE.UPDATE.TKA", "SHARE.CREATE", "SHARE.DELETE",
"SHARE.UPDATE", "TAILNET.ACCEPT.FEATURE", "TAILNET.CREATE",
"TAILNET.CREATE.LOGSTREAM_ENDPOINT", "TAILNET.CREATE.POSTURE_INTEGRATION",
"TAILNET.CREATE.TKA", "TAILNET.DELETE.LOGSTREAM_ENDPOINT",
"TAILNET.DELETE.POSTURE_INTEGRATION", "TAILNET.DELETE.TKA",
"TAILNET.DISABLE.COLLECT_POSTURE_IDENTITY", "TAILNET.DISABLE.COLLECT_SERVICES",
"TAILNET.DISABLE.FILE_SHARING", "TAILNET.DISABLE.GEOSTEERING", "TAILNET.DISABLE.HTTPS",
"TAILNET.DISABLE.LOG_EXIT_FLOWS", "TAILNET.DISABLE.MACHINE_APPROVAL_NEEDED",
"TAILNET.DISABLE.MAGIC_DNS", "TAILNET.DISABLE.MULLVAD_VPN",
"TAILNET.DISABLE.NETWORK_FLOW_LOGGING", "TAILNET.DISABLE.SCIM", "TAILNET.DISABLE.TKA",
"TAILNET.DISABLE.USER_APPROVAL_REQUIRED", "TAILNET.ENABLE.COLLECT_POSTURE_IDENTITY",
"TAILNET.ENABLE.COLLECT_SERVICES", "TAILNET.ENABLE.FILE_SHARING",
"TAILNET.ENABLE.GEOSTEERING", "TAILNET.ENABLE.HTTPS", "TAILNET.ENABLE.LOG_EXIT_FLOWS",
"TAILNET.ENABLE.MACHINE_APPROVAL_NEEDED", "TAILNET.ENABLE.MAGIC_DNS",
"TAILNET.ENABLE.MULLVAD_VPN", "TAILNET.ENABLE.NETWORK_FLOW_LOGGING",
"TAILNET.ENABLE.SCIM", "TAILNET.ENABLE.TKA", "TAILNET.ENABLE.USER_APPROVAL_REQUIRED",
"TAILNET.JOIN", "TAILNET.JOIN_WAITLIST.FEATURE", "TAILNET.LEAVE",
"TAILNET.UPDATE.ACCOUNT_EMAIL", "TAILNET.UPDATE.ACL", "TAILNET.UPDATE.DNS_CONFIG",
"TAILNET.UPDATE.LOGSTREAM_ENDPOINT", "TAILNET.UPDATE.MAX_KEY_DURATION",
"TAILNET.UPDATE.POSTURE_INTEGRATION", "TAILNET.UPDATE.SECURITY_EMAIL",
"TAILNET.UPDATE.SUPPORT_EMAIL", "TAILNET.UPDATE.TCD", "TAILNET.UPDATE.TKA",
"TAILNET.VERIFY.ACCOUNT_EMAIL", "TAILNET.VERIFY.SECURITY_EMAIL",
"TAILNET.VERIFY.SUPPORT_EMAIL", "USER.APPROVE", "USER.CREATE", "USER.DELETE",
"USER.INVITE", "USER.PUSH_USER.ATTRIBUTES", "USER.RESEND.TAILNET_INVITE",
"USER.RESTORE", "USER.RESTORE_GLOBAL", "USER.SUSPEND", "USER.SUSPEND_GLOBAL",
"USER.UPDATE.USER_ROLE", "WEBHOOK_ENDPOINT.CREATE", "WEBHOOK_ENDPOINT.DELETE",
"WEBHOOK_ENDPOINT.UPDATE.SECRET", "WEBHOOK_ENDPOINT.UPDATE.SUBSCRIBED_EVENTS",
"WEB_INTERFACE.LOGIN", "WEB_INTERFACE.LOGOUT", "PAM_CONNECTOR.CREATE",
"PAM_CONNECTOR.CREATE.ACCESS_TOKEN", "PAM_CONNECTOR.DELETE",
"PAM_CONNECTOR.DISABLE.ACCESS_TOKEN", "PAM_CONNECTOR.UPDATE", "PAM_SERVICE.CREATE",
"PAM_SERVICE.DELETE", "PAM_SERVICE.UPDATE", "PAM_SERVICE_ACCOUNT.CREATE",
"PAM_SERVICE_ACCOUNT.CREATE.ACCESS_TOKEN", "PAM_SERVICE_ACCOUNT.DELETE",
"PAM_SERVICE_ACCOUNT.UPDATE", "PAM_SETTINGS.CREATE.CUSTOM_DOMAIN",
"PAM_SETTINGS.CREATE.NOTIFICATION", "PAM_SETTINGS.CREATE.RECORDING_STORAGE",
"PAM_SETTINGS.DELETE.CUSTOM_DOMAIN", "PAM_SETTINGS.DELETE.NOTIFICATION",
"PAM_SETTINGS.DELETE.RECORDING_STORAGE", "PAM_SETTINGS.UPDATE",
"PAM_SETTINGS.UPDATE.CUSTOM_DOMAIN", "PAM_SETTINGS.UPDATE.NOTIFICATION",
"PAM_SETTINGS.UPDATE.SETUP_WIZARD",
];
pub const KNOWN_VALUES: &[KnownValues] = &[
("LogType", LOG_TYPES),
(
"LogstreamEndpointConfiguration.destinationType",
DESTINATION_TYPES,
),
(
"LogstreamEndpointConfiguration.compressionFormat",
COMPRESSION_FORMATS,
),
(
"LogstreamEndpointConfiguration.s3AuthenticationType",
S3_AUTHENTICATION_TYPES,
),
("ConfigurationAuditLog.type", AUDIT_LOG_TYPES),
("ConfigurationAuditLog.origin", AUDIT_ORIGINS),
("ConfigurationAuditLog.actor.type", AUDIT_ACTOR_TYPES),
("ConfigurationAuditLog.target.type", AUDIT_TARGET_TYPES),
(
"ConfigurationAuditLog.target.property",
AUDIT_TARGET_PROPERTIES,
),
("ConfigurationAuditLog.action", AUDIT_ACTIONS),
("ConnectionCounts.proto", FLOW_PROTOCOLS),
("?event[]", AUDIT_EVENTS),
];
model! {
ConfigurationAuditLog {
event_time: "eventTime" => String,
log_type: "type" => String,
deferred_at: "deferredAt" => String,
event_group_id: "eventGroupID" => String,
origin: "origin" => String,
actor: "actor" => AuditActor,
target: "target" => AuditTarget,
action: "action" => String,
old: "old" => Value,
new: "new" => Value,
action_details: "actionDetails" => String,
error: "error" => String,
}
AuditActor as "ConfigurationAuditLog.actor" {
id: "id" => String,
actor_type: "type" => String,
login_name: "loginName" => String,
display_name: "displayName" => String,
tags: "tags" => Vec<String>,
}
AuditTarget as "ConfigurationAuditLog.target" {
id: "id" => String,
name: "name" => String,
target_type: "type" => String,
is_ephemeral: "isEphemeral" => bool,
property: "property" => String,
}
ConnectionCounts {
proto: "proto" => String,
src: "src" => String,
dst: "dst" => String,
tx_pkts: "txPkts" => i64,
tx_bytes: "txBytes" => i64,
rx_pkts: "rxPkts" => i64,
rx_bytes: "rxBytes" => i64,
}
NetworkFlowLog {
logged: "logged" => String,
node_id: "nodeId" => String,
start: "start" => String,
end: "end" => String,
virtual_traffic: "virtualTraffic" => Vec<ConnectionCounts>,
subnet_traffic: "subnetTraffic" => Vec<ConnectionCounts>,
exit_traffic: "exitTraffic" => Vec<ConnectionCounts>,
physical_traffic: "physicalTraffic" => Vec<ConnectionCounts>,
}
LogstreamEndpointConfiguration {
log_type: "logType" => String,
destination_type: "destinationType" => String,
url: "url" => String,
user: "user" => String,
upload_period_minutes: "uploadPeriodMinutes" => i64,
compression_format: "compressionFormat" => String,
token: "token" => Secret,
s3_bucket: "s3Bucket" => String,
s3_region: "s3Region" => String,
s3_key_prefix: "s3KeyPrefix" => String,
s3_authentication_type: "s3AuthenticationType" => String,
s3_access_key_id: "s3AccessKeyId" => String,
s3_secret_access_key: "s3SecretAccessKey" => Secret,
s3_role_arn: "s3RoleArn" => String,
s3_external_id: "s3ExternalId" => String,
gcs_bucket: "gcsBucket" => String,
gcs_key_prefix: "gcsKeyPrefix" => String,
gcs_scopes: "gcsScopes" => Vec<String>,
gcs_credentials: "gcsCredentials" => Secret,
}
AwsExternalId {
external_id: "externalId" => String,
tailscale_aws_account_id: "tailscaleAwsAccountId" => String,
}
LogstreamEndpointPublishingStatus {
last_activity: "lastActivity" => String,
last_error: "lastError" => String,
max_body_size: "maxBodySize" => i64,
num_bytes_sent: "numBytesSent" => i64,
num_entries_sent: "numEntriesSent" => i64,
num_spoofed_entries: "numSpoofedEntries" => i64,
num_total_requests: "numTotalRequests" => i64,
num_failed_requests: "numFailedRequests" => i64,
rate_bytes_sent: "rateBytesSent" => f64,
rate_entries_sent: "rateEntriesSent" => f64,
rate_total_requests: "rateTotalRequests" => f64,
rate_failed_requests: "rateFailedRequests" => f64,
}
AuditLogPage as "GET /tailnet/{tailnet}/logging/configuration 200" {
version: "version" => String,
tailnet: "tailnet" => String,
logs: "logs" => Vec<ConfigurationAuditLog>,
}
NetworkFlowLogPage as "GET /tailnet/{tailnet}/logging/network 200" {
logs: "logs" => Vec<NetworkFlowLog>,
}
AwsExternalIdRequest as "POST /tailnet/{tailnet}/aws-external-id body" {
reusable: "reusable" => bool,
}
AwsTrustPolicyRequest
as "POST /tailnet/{tailnet}/aws-external-id/{id}/validate-aws-trust-policy body" {
role_arn: "roleArn" => String,
}
AwsTrustPolicyFailure
as "POST /tailnet/{tailnet}/aws-external-id/{id}/validate-aws-trust-policy 422" {
message: "message" => String,
}
}