Fix wiki routing

This commit is contained in:
spikecodes 2021-03-17 21:40:55 -07:00
parent 0ce2d9054e
commit a81502dde1
No known key found for this signature in database
GPG Key ID: 004CECFF9B463BCB
3 changed files with 27 additions and 16 deletions

View File

@ -55,14 +55,14 @@ fn request(url: String) -> Boxed<Result<Response<Body>, String>> {
let client: client::Client<_, hyper::Body> = client::Client::builder().build(https); let client: client::Client<_, hyper::Body> = client::Client::builder().build(https);
let builder = Request::builder() let builder = Request::builder()
.method("GET") .method("GET")
.uri(&url) .uri(&url)
.header("User-Agent", format!("web:libreddit:{}", env!("CARGO_PKG_VERSION"))) .header("User-Agent", format!("web:libreddit:{}", env!("CARGO_PKG_VERSION")))
.header("Host", "www.reddit.com") .header("Host", "www.reddit.com")
.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") .header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8")
.header("Accept-Language", "en-US,en;q=0.5") .header("Accept-Language", "en-US,en;q=0.5")
.header("Connection", "keep-alive") .header("Connection", "keep-alive")
.body(Body::empty()); .body(Body::empty());
async move { async move {
match builder { match builder {
@ -84,7 +84,7 @@ fn request(url: String) -> Boxed<Result<Response<Body>, String>> {
} }
Err(e) => Err(e.to_string()), Err(e) => Err(e.to_string()),
}, },
Err(_) => Err("Post url contains non-ASCII characters".to_string()) Err(_) => Err("Post url contains non-ASCII characters".to_string()),
} }
} }
.boxed() .boxed()

View File

@ -162,6 +162,7 @@ async fn main() {
app.at("/u/:name/comments/:id/:title").get(|r| post::item(r).boxed()); app.at("/u/:name/comments/:id/:title").get(|r| post::item(r).boxed());
app.at("/u/:name/comments/:id/:title/:comment_id").get(|r| post::item(r).boxed()); app.at("/u/:name/comments/:id/:title/:comment_id").get(|r| post::item(r).boxed());
app.at("/user/[deleted]").get(|req| error(req, "User has deleted their account".to_string()).boxed());
app.at("/user/:name").get(|r| user::profile(r).boxed()); app.at("/user/:name").get(|r| user::profile(r).boxed());
app.at("/user/:name/comments/:id").get(|r| post::item(r).boxed()); app.at("/user/:name/comments/:id").get(|r| post::item(r).boxed());
app.at("/user/:name/comments/:id/:title").get(|r| post::item(r).boxed()); app.at("/user/:name/comments/:id/:title").get(|r| post::item(r).boxed());
@ -183,22 +184,28 @@ async fn main() {
app.at("/r/:sub/search").get(|r| search::find(r).boxed()); app.at("/r/:sub/search").get(|r| search::find(r).boxed());
app.at("/r/:sub/wiki/").get(|r| subreddit::wiki(r).boxed()); app
.at("/r/:sub/w")
.get(|r| async move { Ok(redirect(format!("/r/{}/wiki", r.param("sub").unwrap_or_default()))) }.boxed());
app
.at("/r/:sub/w/:page")
.get(|r| async move { Ok(redirect(format!("/r/{}/wiki/{}", r.param("sub").unwrap_or_default(), r.param("wiki").unwrap_or_default()))) }.boxed());
app.at("/r/:sub/wiki").get(|r| subreddit::wiki(r).boxed());
app.at("/r/:sub/wiki/:page").get(|r| subreddit::wiki(r).boxed()); app.at("/r/:sub/wiki/:page").get(|r| subreddit::wiki(r).boxed());
app.at("/r/:sub/w").get(|r| subreddit::wiki(r).boxed());
app.at("/r/:sub/w/:page").get(|r| subreddit::wiki(r).boxed());
app.at("/r/:sub/:sort").get(|r| subreddit::community(r).boxed()); app.at("/r/:sub/:sort").get(|r| subreddit::community(r).boxed());
// Comments handler // Comments handler
app.at("/comments/:id/").get(|r| post::item(r).boxed()); app.at("/comments/:id").get(|r| post::item(r).boxed());
// Front page // Front page
app.at("/").get(|r| subreddit::community(r).boxed()); app.at("/").get(|r| subreddit::community(r).boxed());
// View Reddit wiki // View Reddit wiki
app.at("/w").get(|r| subreddit::wiki(r).boxed()); app.at("/w").get(|_| async move { Ok(redirect("/wiki".to_string())) }.boxed());
app.at("/w/:page").get(|r| subreddit::wiki(r).boxed()); app
.at("/w/:page")
.get(|r| async move { Ok(redirect(format!("/wiki/{}", r.param("page").unwrap_or_default()))) }.boxed());
app.at("/wiki").get(|r| subreddit::wiki(r).boxed()); app.at("/wiki").get(|r| subreddit::wiki(r).boxed());
app.at("/wiki/:page").get(|r| subreddit::wiki(r).boxed()); app.at("/wiki/:page").get(|r| subreddit::wiki(r).boxed());

View File

@ -21,7 +21,11 @@ struct UserTemplate {
// FUNCTIONS // FUNCTIONS
pub async fn profile(req: Request<Body>) -> Result<Response<Body>, String> { pub async fn profile(req: Request<Body>) -> Result<Response<Body>, String> {
// Build the Reddit JSON API path // Build the Reddit JSON API path
let path = format!("{}.json?{}&raw_json=1", req.uri().path(), req.uri().query().unwrap_or_default()); let path = format!(
"/user/{}.json?{}&raw_json=1",
req.param("name").unwrap_or("reddit".to_string()),
req.uri().query().unwrap_or_default()
);
// Retrieve other variables from Libreddit request // Retrieve other variables from Libreddit request
let sort = param(&path, "sort"); let sort = param(&path, "sort");