Merge branch 'main' into db-traits-refactor

This commit is contained in:
dullbananas 2023-07-04 07:56:32 -07:00 committed by GitHub
commit d9e0269774
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 77 additions and 53 deletions

34
Cargo.lock generated
View file

@ -31,7 +31,7 @@ dependencies = [
"enum_delegate",
"futures-core",
"http",
"http-signature-normalization 0.7.0",
"http-signature-normalization",
"http-signature-normalization-reqwest",
"httpdate",
"itertools",
@ -2219,15 +2219,6 @@ version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0bfe8eed0a9285ef776bb792479ea3834e8b94e13d615c2f66d03dd50a435a29"
[[package]]
name = "http-signature-normalization"
version = "0.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f8f45adbef81d7ea3bd7e9bcc6734b7245dad05a14abdcc7ddc0988791d63515"
dependencies = [
"httpdate",
]
[[package]]
name = "http-signature-normalization"
version = "0.7.0"
@ -2237,26 +2228,6 @@ dependencies = [
"httpdate",
]
[[package]]
name = "http-signature-normalization-actix"
version = "0.6.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7483d0ee4d093fa4bfe5956cd405492c07808a5064a29cfe3960d474f21f39c2"
dependencies = [
"actix-http",
"actix-rt",
"actix-web",
"base64 0.13.1",
"futures-util",
"http-signature-normalization 0.6.0",
"sha2",
"thiserror",
"tokio",
"tracing",
"tracing-error",
"tracing-futures",
]
[[package]]
name = "http-signature-normalization-reqwest"
version = "0.8.0"
@ -2264,7 +2235,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3c382c69a07b21accae86298d520579403af6479b1cd1c389e3ee11f01d48627"
dependencies = [
"base64 0.13.1",
"http-signature-normalization 0.7.0",
"http-signature-normalization",
"httpdate",
"reqwest",
"reqwest-middleware",
@ -2661,7 +2632,6 @@ dependencies = [
"futures",
"html2md",
"http",
"http-signature-normalization-actix",
"itertools",
"lemmy_api_common",
"lemmy_db_schema",

View file

@ -27,6 +27,7 @@ lto = "thin"
[features]
embed-pictrs = ["pict-rs"]
console = ["console-subscriber", "opentelemetry", "opentelemetry-otlp", "tracing-opentelemetry", "reqwest-tracing/opentelemetry_0_16"]
json-log = ["tracing-subscriber/json"]
default = []
[workspace]

View file

@ -40,7 +40,6 @@ reqwest = { workspace = true }
once_cell = { workspace = true }
html2md = "0.2.14"
serde_with = { workspace = true }
http-signature-normalization-actix = { version = "0.6.2", default-features = false, features = ["server", "sha-2"] }
enum_delegate = "0.2.0"
[dev-dependencies]

View file

@ -27,9 +27,7 @@ pub async fn list_comments(
check_private_instance(&local_user_view, &local_site)?;
let community_id = if let Some(name) = &data.community_name {
resolve_actor_identifier::<ApubCommunity, Community>(name, &context, &None, true)
.await
.ok()
Some(resolve_actor_identifier::<ApubCommunity, Community>(name, &context, &None, true).await?)
.map(|c| c.id)
} else {
data.community_id

View file

@ -29,9 +29,7 @@ pub async fn list_posts(
let page = data.page;
let limit = data.limit;
let community_id = if let Some(name) = &data.community_name {
resolve_actor_identifier::<ApubCommunity, Community>(name, &context, &None, true)
.await
.ok()
Some(resolve_actor_identifier::<ApubCommunity, Community>(name, &context, &None, true).await?)
.map(|c| c.id)
} else {
data.community_id

View file

@ -41,10 +41,11 @@ pub async fn search(
let listing_type = data.listing_type;
let search_type = data.type_.unwrap_or(SearchType::All);
let community_id = if let Some(name) = &data.community_name {
resolve_actor_identifier::<ApubCommunity, Community>(name, &context, &local_user_view, false)
.await
.ok()
.map(|c| c.id)
Some(
resolve_actor_identifier::<ApubCommunity, Community>(name, &context, &local_user_view, false)
.await?,
)
.map(|c| c.id)
} else {
data.community_id
};

View file

@ -19,8 +19,6 @@ use actix_web::{
http::{header, Method},
web,
};
use http_signature_normalization_actix::digest::middleware::VerifyDigest;
use sha2::{Digest, Sha256};
pub fn config(cfg: &mut web::ServiceConfig) {
cfg
@ -57,7 +55,6 @@ pub fn config(cfg: &mut web::ServiceConfig) {
cfg.service(
web::scope("")
.wrap(VerifyDigest::new(Sha256::new()))
.guard(InboxRequestGuard)
.route("/c/{community_name}/inbox", web::post().to(community_inbox))
.route("/u/{user_name}/inbox", web::post().to(person_inbox))

View file

@ -356,10 +356,7 @@ mod tests {
diesel_option_overwrite_to_url(&Some(String::new())),
Ok(Some(None))
));
assert!(matches!(
diesel_option_overwrite_to_url(&Some("invalid_url".to_string())),
Err(_)
));
assert!(diesel_option_overwrite_to_url(&Some("invalid_url".to_string())).is_err());
let example_url = "https://example.com";
assert!(matches!(
diesel_option_overwrite_to_url(&Some(example_url.to_string())),

View file

@ -24,6 +24,62 @@ const BIO_MAX_LENGTH: usize = 300;
const SITE_NAME_MAX_LENGTH: usize = 20;
const SITE_NAME_MIN_LENGTH: usize = 1;
const SITE_DESCRIPTION_MAX_LENGTH: usize = 150;
//Invisible unicode characters, taken from https://invisible-characters.com/
const FORBIDDEN_DISPLAY_CHARS: [char; 53] = [
'\u{0009}',
'\u{00a0}',
'\u{00ad}',
'\u{034f}',
'\u{061c}',
'\u{115f}',
'\u{1160}',
'\u{17b4}',
'\u{17b5}',
'\u{180e}',
'\u{2000}',
'\u{2001}',
'\u{2002}',
'\u{2003}',
'\u{2004}',
'\u{2005}',
'\u{2006}',
'\u{2007}',
'\u{2008}',
'\u{2009}',
'\u{200a}',
'\u{200b}',
'\u{200c}',
'\u{200d}',
'\u{200e}',
'\u{200f}',
'\u{202f}',
'\u{205f}',
'\u{2060}',
'\u{2061}',
'\u{2062}',
'\u{2063}',
'\u{2064}',
'\u{206a}',
'\u{206b}',
'\u{206c}',
'\u{206d}',
'\u{206e}',
'\u{206f}',
'\u{3000}',
'\u{2800}',
'\u{3164}',
'\u{feff}',
'\u{ffa0}',
'\u{1d159}',
'\u{1d173}',
'\u{1d174}',
'\u{1d175}',
'\u{1d176}',
'\u{1d177}',
'\u{1d178}',
'\u{1d179}',
'\u{1d17a}',
];
fn has_newline(name: &str) -> bool {
name.contains('\n')
@ -42,8 +98,8 @@ pub fn is_valid_actor_name(name: &str, actor_name_max_length: usize) -> LemmyRes
// Can't do a regex here, reverse lookarounds not supported
pub fn is_valid_display_name(name: &str, actor_name_max_length: usize) -> LemmyResult<()> {
let check = !name.starts_with('@')
&& !name.starts_with('\u{200b}')
let check = !name.contains(FORBIDDEN_DISPLAY_CHARS)
&& !name.starts_with('@')
&& name.chars().count() >= 3
&& name.chars().count() <= actor_name_max_length
&& !has_newline(name);

View file

@ -185,7 +185,14 @@ pub fn init_logging(opentelemetry_url: &Option<Url>) -> Result<(), LemmyError> {
.trim_matches('"')
.parse::<Targets>()?;
let format_layer = tracing_subscriber::fmt::layer().with_filter(targets.clone());
let format_layer = {
#[cfg(feature = "json-log")]
let layer = tracing_subscriber::fmt::layer().json();
#[cfg(not(feature = "json-log"))]
let layer = tracing_subscriber::fmt::layer();
layer.with_filter(targets.clone())
};
let subscriber = Registry::default()
.with(format_layer)