diff --git a/shell.nix b/shell.nix index 7217520..725dd24 100644 --- a/shell.nix +++ b/shell.nix @@ -8,8 +8,6 @@ pkgs.mkShell { rust-analyzer clippy - bacon - pkg-config openssl ]; diff --git a/src/main.rs b/src/main.rs index a18c6a7..2258085 100644 --- a/src/main.rs +++ b/src/main.rs @@ -130,70 +130,55 @@ async fn _post_comment( } None => return Err(Error::InvalidUrl), // e.g. 404 }; - // TODO: Use web::block - // Create comment in database - let database = data.get_db(&origin)?; - if comment.author.is_none() && database.settings.name_required { - return Err(Error::NameRequired); - } - if comment.email.is_none() && database.settings.email_required { - return Err(Error::EmailRequired); - } - if let Some(parent) = comment.parent { - 'outer2: loop { - let comments = database.get_comments(&comment.content_id)?; - for other_comment in comments.iter() { - if other_comment.id.unwrap() == parent { - if other_comment.parent.is_none() { - break 'outer2; - } - break; + // TODO: Clean up webhook integration + { + let database = data.get_db(&origin)?; + if let Some(webhook) = &database.settings.webhook { + let client = WebhookClient::new(&webhook); + client.send(|message| { + let author = match &comment.author { + Some(author) => &author, + None => "Annonymous", + }; + message + .username(&author) + .avatar_url(&format!( + "https://www.gravatar.com/avatar/{}?d=mp", + get_gravatar(&comment.email) + )) + .embed(|embed| embed + .title(&format!("New comment on {}", page_data.content_id)) + .description(&comment.text) + ) } - } - return Err(Error::InvalidParent); + ).await.unwrap(); } } - database.create_comment(&comment)?; - // Send notification webhook - if let Some(webhook) = &database.settings.webhook { - let client = WebhookClient::new(&webhook); - client.send(|message| { - let author = match &comment.author { - Some(author) => &author, - None => "Annonymous", - }; - message - .username(&author) - .avatar_url(&format!( - "https://www.gravatar.com/avatar/{}?d=mp", - get_gravatar(&comment.email) - )) - .embed(|embed| embed - .title(&format!("New comment on {}", page_data.content_id)) - .description(&comment.text) - .field("Link", &format!("{}#{}", - &url // Remove any trailing hash from URL - .split("#") - .next() - .unwrap(), - &database // Get ID of just created comment - .get_comments(&page_data.content_id) - .unwrap() - .first() // returned in reverse chronological order - .unwrap() - .id - .unwrap() - ), true) - .field("Content ID", &page_data.content_id, true) - .field("Email", match &comment.email { - Some(email) => email, - None => "None", - }, false) - ) + web::block(move || { + let database = data.get_db(&origin)?; + if comment.author.is_none() && database.settings.name_required { + return Err(Error::NameRequired); + } + if comment.email.is_none() && database.settings.email_required { + return Err(Error::EmailRequired); + } + if let Some(parent) = comment.parent { + 'outer2: loop { + let comments = database.get_comments(&comment.content_id)?; + for other_comment in comments.iter() { + if other_comment.id.unwrap() == parent { + if other_comment.parent.is_none() { + break 'outer2; + } + break; + } + } + return Err(Error::InvalidParent); } - ).await.unwrap(); - } - + } + database.create_comment(&comment)?; + Ok(()) + }).await?.unwrap(); Ok(()) }