From 0708fdfb37c0cfb17ab2d640368f38798ba1cd11 Mon Sep 17 00:00:00 2001 From: spikecodes <19519553+spikecodes@users.noreply.github.com> Date: Wed, 29 Dec 2021 11:38:35 -0800 Subject: [PATCH] Cover more Reddit domains with libreddit link rewrites --- Cargo.lock | 157 ++++---------------------------------------------- Cargo.toml | 6 +- src/server.rs | 2 +- src/user.rs | 7 ++- src/utils.rs | 11 ++-- 5 files changed, 27 insertions(+), 156 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 28b0b40..bfe5731 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -99,12 +99,6 @@ version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" -[[package]] -name = "base-x" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4521f3e3d031370679b3b140beb36dfe4801b09ac77e30c61941f97df3ef28b" - [[package]] name = "base64" version = "0.13.0" @@ -186,17 +180,11 @@ dependencies = [ "unicode-width", ] -[[package]] -name = "const_fn" -version = "0.4.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f92cfa0fd5690b3cf8c1ef2cabbd9b7ef22fa53cf5e1f92b05103f6d5d1cf6e7" - [[package]] name = "cookie" -version = "0.15.1" +version = "0.16.0-rc.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5f1c7727e460397e56abc4bddc1d49e07a1ad78fc98eb2e1c8f032a58a2f80d" +checksum = "188a7c2ae2a1026b9831889fd6461db5d33c4f6d54d6f862bd8b81a2fcefbdba" dependencies = [ "time", "version_check", @@ -253,12 +241,6 @@ dependencies = [ "syn", ] -[[package]] -name = "discard" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "212d0f5754cb6769937f4501cc0e67f4f4483c8d2c3e1e922ee9edbe4ab4c7c0" - [[package]] name = "event-listener" version = "2.5.1" @@ -572,7 +554,7 @@ checksum = "1b03d17f364a3a042d5e5d46b053bbbf82c92c9430c592dd4c064dc6ee997125" [[package]] name = "libreddit" -version = "0.21.2" +version = "0.21.3" dependencies = [ "askama", "async-recursion", @@ -740,26 +722,20 @@ version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" -[[package]] -name = "proc-macro-hack" -version = "0.5.19" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" - [[package]] name = "proc-macro2" -version = "1.0.35" +version = "1.0.36" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "392a54546fda6b7cc663379d0e6ce8b324cf88aecc5a499838e1be9781bdce2e" +checksum = "c7342d5883fbccae1cc37a2353b09c87c9b0f3afd73f5fb9bba687a1f733b029" dependencies = [ "unicode-xid", ] [[package]] name = "quote" -version = "1.0.10" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" +checksum = "47aa80447ce4daf1717500037052af176af5d38cc3e571d9ec1c7353fc10c87d" dependencies = [ "proc-macro2", ] @@ -811,15 +787,6 @@ version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "afab94fb28594581f62d981211a9a4d53cc8130bbcbbb89a0440d9b8e81a7746" -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -dependencies = [ - "semver", -] - [[package]] name = "rustls" version = "0.20.2" @@ -908,21 +875,6 @@ dependencies = [ "libc", ] -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -dependencies = [ - "semver-parser", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" - [[package]] name = "serde" version = "1.0.132" @@ -954,12 +906,6 @@ dependencies = [ "serde", ] -[[package]] -name = "sha1" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2579985fda508104f7587689507983eadd6a6e84dd35d6d115361f530916fa0d" - [[package]] name = "signal-hook-registry" version = "1.4.0" @@ -997,64 +943,6 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6e63cff320ae2c57904679ba7cb63280a3dc4613885beafb148ee7bf9aa9042d" -[[package]] -name = "standback" -version = "0.2.17" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e113fb6f3de07a243d434a56ec6f186dfd51cb08448239fe7bcae73f87ff28ff" -dependencies = [ - "version_check", -] - -[[package]] -name = "stdweb" -version = "0.4.20" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d022496b16281348b52d0e30ae99e01a73d737b2f45d38fed4edf79f9325a1d5" -dependencies = [ - "discard", - "rustc_version", - "stdweb-derive", - "stdweb-internal-macros", - "stdweb-internal-runtime", - "wasm-bindgen", -] - -[[package]] -name = "stdweb-derive" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c87a60a40fccc84bef0652345bbbbbe20a605bf5d0ce81719fc476f5c03b50ef" -dependencies = [ - "proc-macro2", - "quote", - "serde", - "serde_derive", - "syn", -] - -[[package]] -name = "stdweb-internal-macros" -version = "0.2.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "58fa5ff6ad0d98d1ffa8cb115892b6e69d67799f6763e162a1c9db421dc22e11" -dependencies = [ - "base-x", - "proc-macro2", - "quote", - "serde", - "serde_derive", - "serde_json", - "sha1", - "syn", -] - -[[package]] -name = "stdweb-internal-runtime" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" - [[package]] name = "strsim" version = "0.10.0" @@ -1083,41 +971,20 @@ dependencies = [ [[package]] name = "time" -version = "0.2.27" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4752a97f8eebd6854ff91f1c1824cd6160626ac4bd44287f7f4ea2035a02a242" +checksum = "41effe7cfa8af36f439fac33861b66b049edc6f9a32331e2312660529c1c24ad" dependencies = [ - "const_fn", + "itoa 0.4.8", "libc", - "standback", - "stdweb", "time-macros", - "version_check", - "winapi", ] [[package]] name = "time-macros" -version = "0.1.1" +version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "957e9c6e26f12cb6d0dd7fc776bb67a706312e7299aed74c8dd5b17ebb27e2f1" -dependencies = [ - "proc-macro-hack", - "time-macros-impl", -] - -[[package]] -name = "time-macros-impl" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fd3c141a1b43194f3f56a1411225df8646c55781d5f26db825b3d98507eb482f" -dependencies = [ - "proc-macro-hack", - "proc-macro2", - "quote", - "standback", - "syn", -] +checksum = "25eb0ca3468fc0acc11828786797f6ef9aa1555e4a211a60d64cc8e4d1be47d6" [[package]] name = "tinyvec" diff --git a/Cargo.toml b/Cargo.toml index d4c6fd7..7d212e4 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -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.21.2" +version = "0.21.3" authors = ["spikecodes <19519553+spikecodes@users.noreply.github.com>"] edition = "2021" @@ -14,12 +14,12 @@ cached = "0.26.2" clap = { version = "2.34.0", default-features = false } regex = "1.5.4" serde = { version = "1.0.132", features = ["derive"] } -cookie = "0.15.1" +cookie = "0.16.0-rc.1" futures-lite = "1.12.0" hyper = { version = "0.14.16", features = ["full"] } hyper-rustls = "0.23.0" route-recognizer = "0.3.1" serde_json = "1.0.73" tokio = { version = "1.15.0", features = ["full"] } -time = "0.2.7" +time = "0.3.5" url = "2.2.2" diff --git a/src/server.rs b/src/server.rs index 448a971..ce20860 100644 --- a/src/server.rs +++ b/src/server.rs @@ -105,7 +105,7 @@ impl ResponseExt for Response { fn remove_cookie(&mut self, name: String) { let mut cookie = Cookie::named(name); cookie.set_path("/"); - cookie.set_max_age(Duration::second()); + cookie.set_max_age(Duration::seconds(1)); if let Ok(val) = HeaderValue::from_str(&cookie.to_string()) { self.headers_mut().append("Set-Cookie", val); } diff --git a/src/user.rs b/src/user.rs index 61772e5..0bb97fb 100644 --- a/src/user.rs +++ b/src/user.rs @@ -5,7 +5,7 @@ use crate::server::RequestExt; use crate::utils::{error, filter_posts, format_url, get_filters, param, template, Post, Preferences, User}; use askama::Template; use hyper::{Body, Request, Response}; -use time::OffsetDateTime; +use time::{OffsetDateTime, macros::format_description}; // STRUCTS #[derive(Template)] @@ -82,7 +82,8 @@ async fn user(name: &str) -> Result { // Send a request to the url json(path, false).await.map(|res| { // Grab creation date as unix timestamp - let created: i64 = res["data"]["created"].as_f64().unwrap_or(0.0).round() as i64; + let created_unix = res["data"]["created"].as_f64().unwrap_or(0.0).round() as i64; + let created = OffsetDateTime::from_unix_timestamp(created_unix).unwrap_or(OffsetDateTime::UNIX_EPOCH); // Closure used to parse JSON from Reddit APIs let about = |item| res["data"]["subreddit"][item].as_str().unwrap_or_default().to_string(); @@ -93,7 +94,7 @@ async fn user(name: &str) -> Result { title: esc!(about("title")), icon: format_url(&about("icon_img")), karma: res["data"]["total_karma"].as_i64().unwrap_or(0), - created: OffsetDateTime::from_unix_timestamp(created).format("%b %d '%y"), + created: created.format(format_description!("%b %d '%y")).unwrap_or_default(), banner: esc!(about("banner_img")), description: about("public_description"), } diff --git a/src/utils.rs b/src/utils.rs index 10af84f..4e7a203 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -9,7 +9,7 @@ use regex::Regex; use serde_json::Value; use std::collections::{HashMap, HashSet}; use std::str::FromStr; -use time::{Duration, OffsetDateTime}; +use time::{Duration, OffsetDateTime, macros::format_description}; use url::Url; // Post flair with content, background color and foreground color @@ -584,6 +584,9 @@ pub fn format_url(url: &str) -> String { match domain { "www.reddit.com" => capture(r"https://www\.reddit\.com/(.*)", "/", 1), + "old.reddit.com" => capture(r"https://old\.reddit\.com/(.*)", "/", 1), + "np.reddit.com" => capture(r"https://np\.reddit\.com/(.*)", "/", 1), + "reddit.com" => capture(r"https://reddit\.com/(.*)", "/", 1), "v.redd.it" => chain!( capture(r"https://v\.redd\.it/(.*)/DASH_([0-9]{2,4}(\.mp4|$|\?source=fallback))", "/vid/", 2), capture(r"https://v\.redd\.it/(.+)/(HLSPlaylist\.m3u8.*)$", "/hls/", 2) @@ -634,12 +637,12 @@ pub fn format_num(num: i64) -> (String, String) { // Parse a relative and absolute time from a UNIX timestamp pub fn time(created: f64) -> (String, String) { - let time = OffsetDateTime::from_unix_timestamp(created.round() as i64); + let time = OffsetDateTime::from_unix_timestamp(created.round() as i64).unwrap_or(OffsetDateTime::UNIX_EPOCH); let time_delta = OffsetDateTime::now_utc() - time; // If the time difference is more than a month, show full date let rel_time = if time_delta > Duration::days(30) { - time.format("%b %d '%y") + time.format(format_description!("%b %d '%y")).unwrap_or_default() // Otherwise, show relative date/time } else if time_delta.whole_days() > 0 { format!("{}d ago", time_delta.whole_days()) @@ -649,7 +652,7 @@ pub fn time(created: f64) -> (String, String) { format!("{}m ago", time_delta.whole_minutes()) }; - (rel_time, time.format("%b %d %Y, %H:%M:%S UTC")) + (rel_time, time.format(format_description!("%b %d %Y, %H:%M:%S UTC")).unwrap_or_default()) } // val() function used to parse JSON from Reddit APIs