Add post character limit config option
This commit is contained in:
parent
bf2e38a397
commit
2747e7b174
5 changed files with 20 additions and 4 deletions
|
@ -607,6 +607,10 @@ components:
|
||||||
login_message:
|
login_message:
|
||||||
description: Login message for signer.
|
description: Login message for signer.
|
||||||
type: string
|
type: string
|
||||||
|
post_character_limit:
|
||||||
|
description: Post character limit.
|
||||||
|
type: integer
|
||||||
|
example: 5000
|
||||||
blockchain_explorer_url:
|
blockchain_explorer_url:
|
||||||
description: Blockchain explorer base URL.
|
description: Blockchain explorer base URL.
|
||||||
type: string
|
type: string
|
||||||
|
|
|
@ -65,6 +65,8 @@ fn default_environment() -> Environment { Environment::Development }
|
||||||
|
|
||||||
fn default_log_level() -> LogLevel { LogLevel::Info }
|
fn default_log_level() -> LogLevel { LogLevel::Info }
|
||||||
|
|
||||||
|
fn default_post_character_limit() -> usize { 2000 }
|
||||||
|
|
||||||
#[derive(Clone, Deserialize)]
|
#[derive(Clone, Deserialize)]
|
||||||
pub struct BlockchainConfig {
|
pub struct BlockchainConfig {
|
||||||
pub chain_id: String,
|
pub chain_id: String,
|
||||||
|
@ -116,6 +118,9 @@ pub struct Config {
|
||||||
|
|
||||||
pub login_message: String,
|
pub login_message: String,
|
||||||
|
|
||||||
|
#[serde(default = "default_post_character_limit")]
|
||||||
|
pub post_character_limit: usize,
|
||||||
|
|
||||||
// Blockchain integration
|
// Blockchain integration
|
||||||
pub blockchain: Option<BlockchainConfig>,
|
pub blockchain: Option<BlockchainConfig>,
|
||||||
|
|
||||||
|
|
|
@ -13,6 +13,7 @@ pub struct InstanceInfo {
|
||||||
registrations: bool,
|
registrations: bool,
|
||||||
|
|
||||||
login_message: String,
|
login_message: String,
|
||||||
|
post_character_limit: usize,
|
||||||
blockchain_explorer_url: Option<String>,
|
blockchain_explorer_url: Option<String>,
|
||||||
blockchain_contract_address: Option<String>,
|
blockchain_contract_address: Option<String>,
|
||||||
ipfs_gateway_url: Option<String>,
|
ipfs_gateway_url: Option<String>,
|
||||||
|
@ -36,6 +37,7 @@ impl From<&Config> for InstanceInfo {
|
||||||
version: get_full_api_version(&config.version),
|
version: get_full_api_version(&config.version),
|
||||||
registrations: config.registrations_open,
|
registrations: config.registrations_open,
|
||||||
login_message: config.login_message.clone(),
|
login_message: config.login_message.clone(),
|
||||||
|
post_character_limit: config.post_character_limit,
|
||||||
blockchain_explorer_url: config.blockchain.as_ref()
|
blockchain_explorer_url: config.blockchain.as_ref()
|
||||||
.and_then(|val| val.explorer_url.clone()),
|
.and_then(|val| val.explorer_url.clone()),
|
||||||
blockchain_contract_address: config.blockchain.as_ref()
|
blockchain_contract_address: config.blockchain.as_ref()
|
||||||
|
|
|
@ -62,7 +62,7 @@ async fn create_status(
|
||||||
let current_user = get_current_user(db_client, auth.token()).await?;
|
let current_user = get_current_user(db_client, auth.token()).await?;
|
||||||
let instance = config.instance();
|
let instance = config.instance();
|
||||||
let mut post_data = PostCreateData::try_from(data.into_inner())?;
|
let mut post_data = PostCreateData::try_from(data.into_inner())?;
|
||||||
post_data.clean()?;
|
post_data.clean(config.post_character_limit)?;
|
||||||
// Mentions
|
// Mentions
|
||||||
let mention_map = find_mentioned_profiles(
|
let mention_map = find_mentioned_profiles(
|
||||||
db_client,
|
db_client,
|
||||||
|
|
|
@ -216,7 +216,10 @@ pub struct PostCreateData {
|
||||||
|
|
||||||
impl PostCreateData {
|
impl PostCreateData {
|
||||||
/// Validate and clean post data.
|
/// Validate and clean post data.
|
||||||
pub fn clean(&mut self) -> Result<(), ValidationError> {
|
pub fn clean(&mut self, character_limit: usize) -> Result<(), ValidationError> {
|
||||||
|
if self.content.chars().count() > character_limit {
|
||||||
|
return Err(ValidationError("post is too long"));
|
||||||
|
};
|
||||||
let content_safe = clean_html(&self.content);
|
let content_safe = clean_html(&self.content);
|
||||||
let content_trimmed = content_safe.trim();
|
let content_trimmed = content_safe.trim();
|
||||||
if content_trimmed.is_empty() {
|
if content_trimmed.is_empty() {
|
||||||
|
@ -231,6 +234,8 @@ impl PostCreateData {
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
|
||||||
|
const POST_CHARACTER_LIMIT: usize = 1000;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn test_validate_post_data() {
|
fn test_validate_post_data() {
|
||||||
let mut post_data_1 = PostCreateData {
|
let mut post_data_1 = PostCreateData {
|
||||||
|
@ -244,7 +249,7 @@ mod tests {
|
||||||
object_id: None,
|
object_id: None,
|
||||||
created_at: None,
|
created_at: None,
|
||||||
};
|
};
|
||||||
assert_eq!(post_data_1.clean().is_ok(), false);
|
assert_eq!(post_data_1.clean(POST_CHARACTER_LIMIT).is_ok(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
|
@ -260,7 +265,7 @@ mod tests {
|
||||||
object_id: None,
|
object_id: None,
|
||||||
created_at: None,
|
created_at: None,
|
||||||
};
|
};
|
||||||
assert_eq!(post_data_2.clean().is_ok(), true);
|
assert_eq!(post_data_2.clean(POST_CHARACTER_LIMIT).is_ok(), true);
|
||||||
assert_eq!(post_data_2.content.as_str(), "test");
|
assert_eq!(post_data_2.content.as_str(), "test");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue