Add API key allowed IP data types

This commit is contained in:
RWDai
2026-05-18 20:47:03 +08:00
parent 64b41434ce
commit 437024cdb1

View File

@@ -24,6 +24,7 @@ pub struct StoredAuthApiKeySnapshot {
pub api_key_allowed_providers: Option<Vec<String>>,
pub api_key_allowed_api_formats: Option<Vec<String>>,
pub api_key_allowed_models: Option<Vec<String>>,
pub api_key_allowed_ips: Option<Vec<String>>,
}
impl StoredAuthApiKeySnapshot {
@@ -97,9 +98,18 @@ impl StoredAuthApiKeySnapshot {
api_key_allowed_models,
"api_keys.allowed_models",
)?,
api_key_allowed_ips: None,
})
}
pub fn with_api_key_allowed_ips(
mut self,
api_key_allowed_ips: Option<serde_json::Value>,
) -> Result<Self, crate::DataLayerError> {
self.api_key_allowed_ips = parse_string_list(api_key_allowed_ips, "api_keys.allowed_ips")?;
Ok(self)
}
pub fn is_currently_usable(&self, now_unix_secs: u64) -> bool {
if !self.user_is_active || self.user_is_deleted {
return false;
@@ -148,6 +158,7 @@ pub struct ResolvedAuthApiKeySnapshot {
pub api_key_allowed_providers: Option<Vec<String>>,
pub api_key_allowed_api_formats: Option<Vec<String>>,
pub api_key_allowed_models: Option<Vec<String>>,
pub api_key_allowed_ips: Option<Vec<String>>,
pub currently_usable: bool,
}
@@ -177,6 +188,7 @@ impl ResolvedAuthApiKeySnapshot {
api_key_allowed_providers: snapshot.api_key_allowed_providers,
api_key_allowed_api_formats: snapshot.api_key_allowed_api_formats,
api_key_allowed_models: snapshot.api_key_allowed_models,
api_key_allowed_ips: snapshot.api_key_allowed_ips,
currently_usable,
};
resolved.constrain_non_standalone_api_key_policy_to_user_policy();
@@ -332,6 +344,7 @@ pub struct StoredAuthApiKeyExportRecord {
pub allowed_providers: Option<Vec<String>>,
pub allowed_api_formats: Option<Vec<String>>,
pub allowed_models: Option<Vec<String>>,
pub allowed_ips: Option<Vec<String>>,
pub rate_limit: Option<i32>,
pub concurrent_limit: Option<i32>,
pub force_capabilities: Option<serde_json::Value>,
@@ -403,6 +416,7 @@ impl StoredAuthApiKeyExportRecord {
"api_keys.allowed_api_formats",
)?,
allowed_models: parse_string_list(allowed_models, "api_keys.allowed_models")?,
allowed_ips: None,
rate_limit,
concurrent_limit,
force_capabilities,
@@ -444,6 +458,14 @@ impl StoredAuthApiKeyExportRecord {
self.feature_settings = normalize_optional_json(feature_settings);
self
}
pub fn with_allowed_ips(
mut self,
allowed_ips: Option<serde_json::Value>,
) -> Result<Self, crate::DataLayerError> {
self.allowed_ips = parse_string_list(allowed_ips, "api_keys.allowed_ips")?;
Ok(self)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, serde::Serialize, serde::Deserialize)]
@@ -469,6 +491,7 @@ pub struct CreateUserApiKeyRecord {
pub allowed_providers: Option<Vec<String>>,
pub allowed_api_formats: Option<Vec<String>>,
pub allowed_models: Option<Vec<String>>,
pub allowed_ips: Option<Vec<String>>,
pub rate_limit: i32,
pub concurrent_limit: Option<i32>,
pub force_capabilities: Option<serde_json::Value>,
@@ -487,6 +510,7 @@ pub struct UpdateUserApiKeyBasicRecord {
pub name: Option<String>,
pub rate_limit: Option<i32>,
pub concurrent_limit: Option<i32>,
pub allowed_ips: Option<Option<Vec<String>>>,
}
#[derive(Debug, Clone, PartialEq)]
@@ -499,6 +523,7 @@ pub struct CreateStandaloneApiKeyRecord {
pub allowed_providers: Option<Vec<String>>,
pub allowed_api_formats: Option<Vec<String>>,
pub allowed_models: Option<Vec<String>>,
pub allowed_ips: Option<Vec<String>>,
pub rate_limit: Option<i32>,
pub concurrent_limit: Option<i32>,
pub force_capabilities: Option<serde_json::Value>,
@@ -521,6 +546,7 @@ pub struct UpdateStandaloneApiKeyBasicRecord {
pub allowed_providers: Option<Option<Vec<String>>>,
pub allowed_api_formats: Option<Option<Vec<String>>>,
pub allowed_models: Option<Option<Vec<String>>>,
pub allowed_ips: Option<Option<Vec<String>>>,
pub expires_at_present: bool,
pub expires_at_unix_secs: Option<u64>,
pub auto_delete_on_expiry_present: bool,