diff --git a/Cargo.lock b/Cargo.lock index 4aed81e..a459ecd 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2271,6 +2271,7 @@ dependencies = [ "sqlx", "tera", "ureq", + "urlencoding", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index 39208c5..d75e236 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -28,6 +28,7 @@ itertools = "0.13" job_scheduler_ng = "2.0" ureq = { version = "2.9", features = ["json"] } regex = "1.10" +urlencoding = "2.1" [target.'cfg(not(windows))'.dependencies] openssl = { version = "0.10", features = [ "vendored" ] } diff --git a/Rocket.toml b/Rocket.toml index 9f97381..4b4856e 100644 --- a/Rocket.toml +++ b/Rocket.toml @@ -5,4 +5,4 @@ limits = { file = "10 MiB", data-form = "10 MiB"} smtp_pw = "8kIjlLH79Ky6D3jQ" usage_log_path = "./usage.txt" openweathermap_key = "c8dab8f91b5b815d76e9879cbaecd8d5" -wordpress_key = "KYplHPxd6Gtqjdx4Ruik" +wordpress_key = "pw-to-allow-sending-notifications" diff --git a/src/tera/mod.rs b/src/tera/mod.rs index 982a1b7..8ef6830 100644 --- a/src/tera/mod.rs +++ b/src/tera/mod.rs @@ -121,6 +121,7 @@ fn unauthorized_error(req: &Request) -> Redirect { #[derive(FromForm, Debug)] struct NewBlogpostForm<'r> { article_url: &'r str, + article_title: &'r str, pw: &'r str, } @@ -135,7 +136,7 @@ async fn new_blogpost( Notification::create_for_role( db, &member, - &format!("auf unserer Website!"), + &urlencoding::decode(blogpost.article_title).expect("UTF-8"), &format!("Neuer Blogpost"), Some(blogpost.article_url), None, diff --git a/notes.md b/wordpress-notes.md similarity index 56% rename from notes.md rename to wordpress-notes.md index 74ce2fe..413af99 100644 --- a/notes.md +++ b/wordpress-notes.md @@ -71,3 +71,54 @@ remove_action('authenticate', 'wp_authenticate_username_password', 20); add_filter( 'authenticate', 'rot_auth', 10, 3 ); ``` + + +# Wordpress notify rowt on newly published article + +Add the following code to `wp-content/themes/bravada/functions.php`: + +``` + +function send_article_url_on_publish($new_status, $old_status, $post) { + // Check if the post is transitioning to 'publish' status + if ($new_status == 'publish' && $old_status != 'publish' && $post->post_type == 'post') { + // Get the URL of the newly published article + $article_url = get_permalink($post->ID); + $article_title = get_the_title($post->ID); + + // URL to send the POST request to + $api_url = 'https://app.rudernlinz.at/new-blogpost'; + + // Prepare the data for the POST request + $body = array( + 'article_url' => $article_url, + 'article_title' => $article_title, + 'pw' => "pw-as-specified-in-rockettoml" + ); + + // Prepare the arguments for wp_remote_post + $args = array( + 'body' => $body, + 'timeout' => '5', + 'redirection' => '5', + 'httpversion' => '1.0', + 'blocking' => true, + 'headers' => array(), + 'cookies' => array() + ); + + // Send the POST request + $response = wp_remote_post($api_url, $args); + + // Optional: Check if the request was successful + if (is_wp_error($response)) { + error_log('Failed to send POST request: ' . $response->get_error_message()); + } else { + error_log('POST request sent successfully with article URL: ' . $article_url); + } + } +} + +// Hook the function to the 'transition_post_status' action +add_action('transition_post_status', 'send_article_url_on_publish', 10, 3); +```