Compare commits

..

8 Commits

Author SHA1 Message Date
45a5778571 Escape text-only flairs 2021-07-19 10:20:00 -07:00
be253d40dd Escape html characters in post flairs (#247)
* Encode HTML characters in flairs

* Encode HTML characters in flairs

* Use esc! macro for HTML escaping

Co-authored-by: spikecodes <19519553+spikecodes@users.noreply.github.com>
2021-07-19 17:15:15 +00:00
e571cc3b1e Tweak styling of Dracula theme 2021-07-19 10:07:00 -07:00
345f8e7b80 Dampen title color of visited posts. Fixes #222 2021-07-18 14:53:08 -07:00
a190890239 Fix Regex matching of Reddit links 2021-07-17 22:24:28 -07:00
ee51ce1a76 Add instance (#242) 2021-07-07 00:08:02 +00:00
81a2df98cb Add awesomehub.io instance. Closes #239 2021-07-05 00:14:38 +00:00
e79a4b704a Add cyberhost.uk instance. Closes #238 2021-07-05 00:03:38 +00:00
6 changed files with 27 additions and 21 deletions

2
Cargo.lock generated
View File

@ -609,7 +609,7 @@ checksum = "12b8adadd720df158f4d70dfe7ccc6adb0472d7c55ca83445f6a5ab3e36f8fb6"
[[package]]
name = "libreddit"
version = "0.14.9"
version = "0.14.12"
dependencies = [
"askama",
"async-recursion",

View File

@ -3,7 +3,7 @@ name = "libreddit"
description = " Alternative private front-end to Reddit"
license = "AGPL-3.0"
repository = "https://github.com/spikecodes/libreddit"
version = "0.14.9"
version = "0.14.12"
authors = ["spikecodes <19519553+spikecodes@users.noreply.github.com>"]
edition = "2018"

View File

@ -42,7 +42,10 @@ Feel free to [open an issue](https://github.com/spikecodes/libreddit/issues/new)
| [libreddit.domain.glass](https://libreddit.domain.glass) | 🇺🇸 US | ✅ |
| [libreddit.trevorthalacker.com](https://libreddit.trevorthalacker.com) | 🇺🇸 US | ✅ |
| [reddit.artemislena.eu](https://reddit.artemislena.eu) | 🇩🇪 DE | |
| [reddit.git-bruh.duckdns.org](https://reddit.git-bruh.duckdns.org) | 🇩🇪 DE | |
| [r.nf](https://r.nf) | 🇩🇪 DE | ✅ |
| [libreddit.cyberhost.uk](https://libreddit.cyberhost.uk) | 🇫🇮 FI | |
| [libreddit.awesomehub.io](https://libreddit.awesomehub.io) | 🇫🇮 FI | |
| [spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion](http://spjmllawtheisznfs7uryhxumin26ssv2draj7oope3ok3wuhy43eoyd.onion) | 🇮🇳 IN | |
| [fwhhsbrbltmrct5hshrnqlqygqvcgmnek3cnka55zj4y7nuus5muwyyd.onion](http://fwhhsbrbltmrct5hshrnqlqygqvcgmnek3cnka55zj4y7nuus5muwyyd.onion) | 🇩🇪 DE | |
| [dflv6yjt7il3n3tggf4qhcmkzbti2ppytqx3o7pjrzwgntutpewscyid.onion](http://dflv6yjt7il3n3tggf4qhcmkzbti2ppytqx3o7pjrzwgntutpewscyid.onion) | 🇺🇸 US | |

View File

@ -1,7 +1,7 @@
// Global specifiers
#![forbid(unsafe_code)]
#![warn(clippy::pedantic, clippy::all)]
#![allow(clippy::needless_pass_by_value, clippy::cast_possible_truncation, clippy::cast_possible_wrap, clippy::manual_find_map)]
#![allow(clippy::needless_pass_by_value, clippy::cast_possible_truncation, clippy::cast_possible_wrap, clippy::manual_find_map, clippy::unused_async)]
// Reference local files
mod post;
@ -251,7 +251,7 @@ async fn main() {
app.at("/:id").get(|req: Request<Body>| match req.param("id").as_deref() {
// Sort front page
Some("best") | Some("hot") | Some("new") | Some("top") | Some("rising") | Some("controversial") => subreddit::community(req).boxed(),
Some("best" | "hot" | "new" | "top" | "rising" | "controversial") => subreddit::community(req).boxed(),
// Short link for post
Some(id) if id.len() > 4 && id.len() < 7 => post::item(req).boxed(),
// Error message for unknown pages

View File

@ -39,7 +39,7 @@ impl FlairPart {
Self {
flair_part_type: value("e").to_string(),
value: match value("e") {
"text" => value("t").to_string(),
"text" => esc!(value("t")),
"emoji" => format_url(value("u")),
_ => String::new(),
},
@ -52,7 +52,7 @@ impl FlairPart {
"text" => match text_flair {
Some(text) => vec![Self {
flair_part_type: "text".to_string(),
value: text.to_string(),
value: esc!(text),
}],
None => Vec::new(),
},
@ -518,7 +518,7 @@ pub fn format_url(url: &str) -> String {
// Rewrite Reddit links to Libreddit in body of text
pub fn rewrite_urls(input_text: &str) -> String {
let text1 = Regex::new(r#"href="(https|http|)://(www.|old.|np.|amp.|)(reddit.com|redd.it)/"#).map_or(String::new(), |re| re.replace_all(input_text, r#"href="/"#).to_string());
let text1 = Regex::new(r#"href="(https|http|)://(www\.|old\.|np\.|amp\.|)(reddit\.com|redd\.it)/"#).map_or(String::new(), |re| re.replace_all(input_text, r#"href="/"#).to_string());
// Rewrite external media previews to Libreddit
Regex::new(r"https://external-preview\.redd\.it(.*)[^?]").map_or(String::new(), |re| {
@ -568,27 +568,17 @@ pub fn val(j: &Value, k: &str) -> String {
j["data"][k].as_str().unwrap_or_default().to_string()
}
// Escape < and > to accurately render HTML
#[macro_export]
macro_rules! esc {
($f:expr) => {
$f.replace('<', "&lt;").replace('>', "&gt;")
$f.replace('&', "&amp;").replace('<', "&lt;").replace('>', "&gt;")
};
($j:expr, $k:expr) => {
$j["data"][$k].as_str().unwrap_or_default().to_string().replace('<', "&lt;").replace('>', "&gt;")
};
}
// Escape < and > to accurately render HTML
// pub fn esc(j: &Value, k: &str) -> String {
// val(j,k)
// // .replace('&', "&amp;")
// .replace('<', "&lt;")
// .replace('>', "&gt;")
// // .replace('"', "&quot;")
// // .replace('\'', "&#x27;")
// // .replace('/', "&#x2f;")
// }
//
// NETWORKING
//

View File

@ -24,6 +24,7 @@
--post: #161616;
--panel-border: 1px solid #333;
--highlighted: #333;
--visited: #aaa;
--shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
}
@ -39,6 +40,7 @@
--post: #eee;
--panel-border: 1px solid #ccc;
--highlighted: white;
--visited: #555;
--shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
}
@ -54,6 +56,7 @@
--post: #eee;
--panel-border: 1px solid #ccc;
--highlighted: white;
--visited: #555;
--shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
@ -68,6 +71,7 @@
--post: black;
--panel-border: 2px solid #0f0f0f;
--highlighted: #0f0f0f;
--visited: #aaa;
--shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
@ -78,10 +82,11 @@
--text: #f8f8f2;
--foreground: #3d4051;
--background: #282a36;
--outside: #44475a;
--post: #44475a;
--outside: #393c4d;
--post: #333544;
--panel-border: 2px solid #44475a;
--highlighted: #4e5267;
--visited: #969692;
--shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
@ -96,6 +101,7 @@
--post: #434c5e;
--panel-border: 2px solid #4c566a;
--highlighted: #3b4252;
--visited: #a3a5aa;
--shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
@ -110,6 +116,7 @@
--post: #3e3647;
--panel-border: 2px solid #2f2738;
--highlighted: #302a36;
--visited: #91889b;
--shadow: 0 1px 3px rgba(0, 0, 0, 0.1);
}
@ -124,6 +131,7 @@
--post: #181c3a;
--panel-border: 1px solid #1F2347;
--highlighted: #1F2347;
--visited: #aaa;
--shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
}
@ -138,6 +146,7 @@
--post: #1b2936;
--panel-border: 0px solid black;
--highlighted: #234;
--visited: #aaa;
--shadow: 0 2px 5px rgba(0, 0, 0, 0.5);
}
@ -713,6 +722,10 @@ a.search_subreddit:hover {
grid-area: post_title;
}
.post:not(.highlighted) .post_title a:visited {
color: var(--visited);
}
.post_notification {
grid-area: post_notification;
margin: 5px 15px;