Handle obfuscated share links
This commit is contained in:
parent
2815dc5209
commit
469aff0689
26
src/main.rs
26
src/main.rs
@ -18,6 +18,7 @@ use clap::{Arg, ArgAction, Command};
|
||||
|
||||
use futures_lite::FutureExt;
|
||||
use hyper::{header::HeaderValue, Body, Request, Response};
|
||||
use url::Url;
|
||||
|
||||
mod client;
|
||||
use client::{canonical_path, proxy};
|
||||
@ -310,6 +311,31 @@ async fn main() {
|
||||
app.at("/info").get(|r| instance_info::instance_info(r).boxed());
|
||||
app.at("/info.:extension").get(|r| instance_info::instance_info(r).boxed());
|
||||
|
||||
// Handle obfuscated share links.
|
||||
// Note that this still forces the server to follow the share link to get to the post, so maybe this wants to be updated with a warning before it follow it
|
||||
app.at("/r/:sub/s/:id").get(|req: Request<Body>| {
|
||||
Box::pin(async move {
|
||||
let sub = req.param("sub").unwrap_or_default();
|
||||
match req.param("id").as_deref() {
|
||||
|
||||
// Share link
|
||||
Some(id) if (8..12).contains(&id.len()) => match canonical_path(format!("/r/{}/s/{}", sub, id)).await {
|
||||
Ok(path_opt) => match path_opt {
|
||||
Some(path) => match Url::parse(&path) {
|
||||
Ok(parsed_path) => Ok(redirect(parsed_path.path().to_string())),
|
||||
_ => error(req, "Bad response from reddit.com").await,
|
||||
},
|
||||
None => error(req, "Post ID is invalid. It may point to a post on a community that has been banned.").await,
|
||||
},
|
||||
Err(e) => error(req, e).await,
|
||||
},
|
||||
|
||||
// Error message for unknown pages
|
||||
_ => error(req, "Nothing here".to_string()).await,
|
||||
}
|
||||
})
|
||||
});
|
||||
|
||||
app.at("/:id").get(|req: Request<Body>| {
|
||||
Box::pin(async move {
|
||||
match req.param("id").as_deref() {
|
||||
|
Loading…
Reference in New Issue
Block a user