diff --git a/pbs-api-types/src/lib.rs b/pbs-api-types/src/lib.rs index 58f5615a..7775324d 100644 --- a/pbs-api-types/src/lib.rs +++ b/pbs-api-types/src/lib.rs @@ -3,6 +3,30 @@ use proxmox::api::schema::{ApiStringFormat, Schema, StringSchema}; use proxmox::const_regex; +#[rustfmt::skip] +#[macro_export] +macro_rules! PROXMOX_SAFE_ID_REGEX_STR { () => { r"(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)" }; } + +#[rustfmt::skip] +#[macro_export] +macro_rules! BACKUP_ID_RE { () => (r"[A-Za-z0-9_][A-Za-z0-9._\-]*") } + +#[rustfmt::skip] +#[macro_export] +macro_rules! BACKUP_TYPE_RE { () => (r"(?:host|vm|ct)") } + +#[rustfmt::skip] +#[macro_export] +macro_rules! BACKUP_TIME_RE { () => (r"[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z") } + +#[rustfmt::skip] +#[macro_export] +macro_rules! SNAPSHOT_PATH_REGEX_STR { + () => ( + concat!(r"(", BACKUP_TYPE_RE!(), ")/(", BACKUP_ID_RE!(), ")/(", BACKUP_TIME_RE!(), r")") + ); +} + #[macro_use] mod userid; pub use userid::Authid; @@ -12,14 +36,19 @@ pub use userid::{Tokenname, TokennameRef}; pub use userid::{Username, UsernameRef}; pub use userid::{PROXMOX_GROUP_ID_SCHEMA, PROXMOX_TOKEN_ID_SCHEMA, PROXMOX_TOKEN_NAME_SCHEMA}; -#[macro_export] -macro_rules! PROXMOX_SAFE_ID_REGEX_STR { - () => { - r"(?:[A-Za-z0-9_][A-Za-z0-9._\-]*)" - }; -} - const_regex! { + pub BACKUP_TYPE_REGEX = concat!(r"^(", BACKUP_TYPE_RE!(), r")$"); + + pub BACKUP_ID_REGEX = concat!(r"^", BACKUP_ID_RE!(), r"$"); + + pub BACKUP_DATE_REGEX = concat!(r"^", BACKUP_TIME_RE!() ,r"$"); + + pub GROUP_PATH_REGEX = concat!(r"^(", BACKUP_TYPE_RE!(), ")/(", BACKUP_ID_RE!(), r")$"); + + pub BACKUP_FILE_REGEX = r"^.*\.([fd]idx|blob)$"; + + pub SNAPSHOT_PATH_REGEX = concat!(r"^", SNAPSHOT_PATH_REGEX_STR!(), r"$"); + pub FINGERPRINT_SHA256_REGEX = r"^(?:[0-9a-fA-F][0-9a-fA-F])(?::[0-9a-fA-F][0-9a-fA-F]){31}$"; /// Regex for safe identifiers. @@ -51,3 +80,5 @@ pub const SINGLE_LINE_COMMENT_FORMAT: ApiStringFormat = pub const SINGLE_LINE_COMMENT_SCHEMA: Schema = StringSchema::new("Comment (single line).") .format(&SINGLE_LINE_COMMENT_FORMAT) .schema(); + +pub const BACKUP_ID_FORMAT: ApiStringFormat = ApiStringFormat::Pattern(&BACKUP_ID_REGEX); diff --git a/pbs-api-types/src/userid.rs b/pbs-api-types/src/userid.rs index 34c7a09f..08335b93 100644 --- a/pbs-api-types/src/userid.rs +++ b/pbs-api-types/src/userid.rs @@ -33,8 +33,6 @@ use proxmox::api::api; use proxmox::api::schema::{ApiStringFormat, Schema, StringSchema}; use proxmox::const_regex; -use super::PROXMOX_SAFE_ID_REGEX_STR; - // we only allow a limited set of characters // colon is not allowed, because we store usernames in // colon separated lists)! diff --git a/src/backup/backup_info.rs b/pbs-datastore/src/backup_info.rs similarity index 100% rename from src/backup/backup_info.rs rename to pbs-datastore/src/backup_info.rs diff --git a/src/backup/manifest.rs b/pbs-datastore/src/manifest.rs similarity index 100% rename from src/backup/manifest.rs rename to pbs-datastore/src/manifest.rs diff --git a/src/api2/types/mod.rs b/src/api2/types/mod.rs index 820d9618..652d7bf4 100644 --- a/src/api2/types/mod.rs +++ b/src/api2/types/mod.rs @@ -41,17 +41,6 @@ pub const FILENAME_FORMAT: ApiStringFormat = ApiStringFormat::VerifyFn(|name| { Ok(()) }); -macro_rules! BACKUP_ID_RE { () => (r"[A-Za-z0-9_][A-Za-z0-9._\-]*") } -macro_rules! BACKUP_TYPE_RE { () => (r"(?:host|vm|ct)") } -macro_rules! BACKUP_TIME_RE { - () => (r"[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}Z") -} -macro_rules! SNAPSHOT_PATH_REGEX_STR { - () => ( - concat!(r"(", BACKUP_TYPE_RE!(), ")/(", BACKUP_ID_RE!(), ")/(", BACKUP_TIME_RE!(), r")") - ); -} - macro_rules! DNS_LABEL { () => (r"(?:[a-zA-Z0-9](?:[a-zA-Z0-9\-]*[a-zA-Z0-9])?)") } macro_rules! DNS_NAME { () => (concat!(r"(?:(?:", DNS_LABEL!() , r"\.)*", DNS_LABEL!(), ")")) } @@ -101,18 +90,6 @@ const_regex!{ pub UUID_REGEX = r"^[0-9a-f]{8}(?:-[0-9a-f]{4}){3}-[0-9a-f]{12}$"; - pub BACKUP_TYPE_REGEX = concat!(r"^(", BACKUP_TYPE_RE!(), r")$"); - - pub BACKUP_ID_REGEX = concat!(r"^", BACKUP_ID_RE!(), r"$"); - - pub BACKUP_DATE_REGEX = concat!(r"^", BACKUP_TIME_RE!() ,r"$"); - - pub GROUP_PATH_REGEX = concat!(r"^(", BACKUP_TYPE_RE!(), ")/(", BACKUP_ID_RE!(), r")$"); - - pub SNAPSHOT_PATH_REGEX = concat!(r"^", SNAPSHOT_PATH_REGEX_STR!(), r"$"); - - pub BACKUP_FILE_REGEX = r"^.*\.([fd]idx|blob)$"; - pub DATASTORE_MAP_REGEX = concat!(r"(:?", PROXMOX_SAFE_ID_REGEX_STR!(), r"=)?", PROXMOX_SAFE_ID_REGEX_STR!()); pub TAPE_RESTORE_SNAPSHOT_REGEX = concat!(r"^", PROXMOX_SAFE_ID_REGEX_STR!(), r":", SNAPSHOT_PATH_REGEX_STR!(), r"$"); @@ -133,9 +110,6 @@ pub const IP_FORMAT: ApiStringFormat = pub const PVE_CONFIG_DIGEST_FORMAT: ApiStringFormat = ApiStringFormat::Pattern(&SHA256_HEX_REGEX); -pub const BACKUP_ID_FORMAT: ApiStringFormat = - ApiStringFormat::Pattern(&BACKUP_ID_REGEX); - pub const UUID_FORMAT: ApiStringFormat = ApiStringFormat::Pattern(&UUID_REGEX);