From 26e00bae9f43707887df371aad7652ac88392033 Mon Sep 17 00:00:00 2001 From: Leonora Tindall Date: Mon, 31 Oct 2022 21:53:32 -0500 Subject: [PATCH] Use a proper user agent string --- src/main.rs | 34 ++++++++++++++++++++++++++++++---- src/syndication.rs | 23 +++++++++++++++++------ 2 files changed, 47 insertions(+), 10 deletions(-) diff --git a/src/main.rs b/src/main.rs index f5b71c9..c4c8326 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use std::error::Error; #[macro_use] extern crate rocket; -use reqwest::StatusCode; +use reqwest::{Client, StatusCode}; use rocket::response::content::RawHtml; use rocket::serde::json::Json; @@ -30,6 +30,15 @@ fn default_base_url() -> String { "/".into() } +fn user_agent() -> String { + format!( + "{}/{} (RSS feed converter) on {}", + env!("CARGO_PKG_NAME"), + env!("CARGO_PKG_VERSION"), + &ARGS.domain + ) +} + static ARGS: once_cell::sync::Lazy = once_cell::sync::Lazy::new(|| Args::parse()); #[get("/")] @@ -61,8 +70,17 @@ async fn syndication_rss_route( let project_url = format!("{}{}", COHOST_ACCOUNT_API_URL, project); let posts_url = cohost_posts_api_url(project, page); + let client = match Client::builder().user_agent(user_agent()).build() { + Ok(v) => v, + Err(e) => { + let err = format!("Couldn't build a reqwest client: {:?}", e); + eprintln!("{}", err); + return Err(ErrorResponse::InternalError(err)); + } + }; + eprintln!("making request to {}", project_url); - let project_data: CohostAccount = match reqwest::get(project_url).await { + let project_data: CohostAccount = match client.get(project_url).send().await { Ok(v) => match v.status() { StatusCode::OK => match v.json::().await { Ok(a) => a, @@ -93,7 +111,7 @@ async fn syndication_rss_route( }; eprintln!("making request to {}", posts_url); - match reqwest::get(posts_url).await { + match client.get(posts_url).send().await { Ok(v) => match v.status() { StatusCode::OK => match v.json::().await { Ok(page_data) => { @@ -143,10 +161,18 @@ async fn webfinger_route(params: HashMap) -> Option v, + Err(e) => { + let err = format!("Couldn't build a reqwest client: {:?}", e); + eprintln!("{}", err); + return None; + } + }; if let Some(param) = params.iter().next() { let url = format!("{}{}", COHOST_ACCOUNT_API_URL, param.0); eprintln!("making request to {}", url); - match reqwest::get(url).await { + match client.get(url).send().await { Ok(v) => { match v.status() { StatusCode::OK => match v.json::().await { diff --git a/src/syndication.rs b/src/syndication.rs index c35a9af..32446cb 100644 --- a/src/syndication.rs +++ b/src/syndication.rs @@ -1,12 +1,21 @@ use crate::cohost_account::CohostAccount; use crate::cohost_posts::*; use crate::ARGS; -use rss::Channel; +use atom_syndication::LinkBuilder; use rss::extension::atom::{AtomExtensionBuilder, Link}; -use atom_syndication::LinkBuilder; +use rss::Channel; fn rel_link_for(rel: &str, project_name: &str, page_number: u64) -> Link { - LinkBuilder::default().rel(rel).href(format!("https://{}{}{}/feed.rss?page={}", &ARGS.domain, &ARGS.base_url, project_name.clone(), page_number)).build() + LinkBuilder::default() + .rel(rel) + .href(format!( + "https://{}{}{}/feed.rss?page={}", + &ARGS.domain, + &ARGS.base_url, + project_name.clone(), + page_number + )) + .build() } pub fn channel_for_posts_page( @@ -27,12 +36,14 @@ pub fn channel_for_posts_page( ))) .link(format!( "https://cohost.org/{}?page={}", - project_name, - page_number + project_name, page_number )); let mut atom = AtomExtensionBuilder::default(); - let mut links = vec![rel_link_for("self", project_name, page_number), rel_link_for("first", project_name, 0)]; + let mut links = vec![ + rel_link_for("self", project_name, page_number), + rel_link_for("first", project_name, 0), + ]; if page_number > 0 { links.push(rel_link_for("prev", project_name, page_number - 1)); }