Increase max number of allowed extra fields for remote actors to 100

This commit is contained in:
silverpill 2022-12-14 16:39:00 +00:00
parent a14c719d25
commit 8e08195b44
2 changed files with 20 additions and 10 deletions

View file

@ -409,11 +409,12 @@ impl ProfileCreateData {
if let Some(display_name) = &self.display_name { if let Some(display_name) = &self.display_name {
validate_display_name(display_name)?; validate_display_name(display_name)?;
}; };
let is_remote = self.actor_json.is_some();
if let Some(bio) = &self.bio { if let Some(bio) = &self.bio {
let cleaned_bio = clean_bio(bio, self.actor_json.is_some())?; let cleaned_bio = clean_bio(bio, is_remote)?;
self.bio = Some(cleaned_bio); self.bio = Some(cleaned_bio);
}; };
self.extra_fields = clean_extra_fields(&self.extra_fields)?; self.extra_fields = clean_extra_fields(&self.extra_fields, is_remote)?;
Ok(()) Ok(())
} }
} }
@ -451,12 +452,13 @@ impl ProfileUpdateData {
if let Some(display_name) = &self.display_name { if let Some(display_name) = &self.display_name {
validate_display_name(display_name)?; validate_display_name(display_name)?;
}; };
let is_remote = self.actor_json.is_some();
// Validate and clean bio // Validate and clean bio
if let Some(bio) = &self.bio { if let Some(bio) = &self.bio {
let cleaned_bio = clean_bio(bio, self.actor_json.is_some())?; let cleaned_bio = clean_bio(bio, is_remote)?;
self.bio = Some(cleaned_bio); self.bio = Some(cleaned_bio);
}; };
self.extra_fields = clean_extra_fields(&self.extra_fields)?; self.extra_fields = clean_extra_fields(&self.extra_fields, is_remote)?;
Ok(()) Ok(())
} }
} }

View file

@ -49,9 +49,10 @@ pub fn clean_bio(bio: &str, is_remote: bool) -> Result<String, ValidationError>
} }
/// Validates extra fields and removes fields with empty labels /// Validates extra fields and removes fields with empty labels
pub fn clean_extra_fields(extra_fields: &[ExtraField]) pub fn clean_extra_fields(
-> Result<Vec<ExtraField>, ValidationError> extra_fields: &[ExtraField],
{ is_remote: bool,
) -> Result<Vec<ExtraField>, ValidationError> {
let mut cleaned_extra_fields = vec![]; let mut cleaned_extra_fields = vec![];
for mut field in extra_fields.iter().cloned() { for mut field in extra_fields.iter().cloned() {
field.name = field.name.trim().to_string(); field.name = field.name.trim().to_string();
@ -67,8 +68,14 @@ pub fn clean_extra_fields(extra_fields: &[ExtraField])
}; };
cleaned_extra_fields.push(field); cleaned_extra_fields.push(field);
}; };
if cleaned_extra_fields.len() > 20 { if is_remote {
return Err(ValidationError("at most 20 fields are allowed")); if cleaned_extra_fields.len() > 100 {
return Err(ValidationError("at most 100 fields are allowed"));
};
} else {
if cleaned_extra_fields.len() > 10 {
return Err(ValidationError("at most 10 fields are allowed"));
};
}; };
Ok(cleaned_extra_fields) Ok(cleaned_extra_fields)
} }
@ -118,7 +125,8 @@ mod tests {
value: "<p>0x1234</p>".to_string(), value: "<p>0x1234</p>".to_string(),
value_source: None, value_source: None,
}]; }];
let result = clean_extra_fields(&extra_fields).unwrap().pop().unwrap(); let result = clean_extra_fields(&extra_fields, false)
.unwrap().pop().unwrap();
assert_eq!(result.name, "$ETH"); assert_eq!(result.name, "$ETH");
assert_eq!(result.value, "0x1234"); assert_eq!(result.value, "0x1234");
} }