From c075068649012011b00f3fffb587e73285e28040 Mon Sep 17 00:00:00 2001 From: ATechnoHazard Date: Thu, 24 Sep 2020 22:45:48 +0530 Subject: [PATCH] pastes: validate URLs using regex Signed-off-by: ATechnoHazard --- Cargo.lock | 17 +---------------- Cargo.toml | 2 +- src/core/paste/service.rs | 4 +++- 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6824a5b..2f53ee1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -806,6 +806,7 @@ dependencies = [ "jirachi", "jirachi_cli", "jsonwebtoken", + "regex 1.3.9", "rocket", "rocket_contrib", "rocket_cors", @@ -816,7 +817,6 @@ dependencies = [ "slog-async", "slog-term", "uuid", - "validator", ] [[package]] @@ -1873,21 +1873,6 @@ dependencies = [ "serde", ] -[[package]] -name = "validator" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e60fadf92c22236de4028ceb0b8af50ed3430d41ad43d7a7d63b6bd1a8f47c38" -dependencies = [ - "idna 0.2.0", - "lazy_static", - "regex 1.3.9", - "serde", - "serde_derive", - "serde_json", - "url 2.1.1", -] - [[package]] name = "vcpkg" version = "0.2.10" diff --git a/Cargo.toml b/Cargo.toml index 70e9186..f198a0d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,13 +23,13 @@ jsonwebtoken = "7.2.0" slog = "2.5.2" slog-term = "2.6.0" anyhow = "1.0.31" -validator = "0.10.1" slog-async = "2.5.0" bcrypt = "0.8.1" chrono = "0.4.13" uuid = { version = "0.8.1", features = ["serde", "v4"] } jirachi = { version = "0.1.4", features = ["collision-resistant"] } rocket_cors = "0.5.1" +regex = "1.3.9" [dev-dependencies] diesel_cli = { version = "1.4.1", default-features = false, features = ["postgres"] } diff --git a/src/core/paste/service.rs b/src/core/paste/service.rs index 85429f0..02eeeae 100644 --- a/src/core/paste/service.rs +++ b/src/core/paste/service.rs @@ -1,11 +1,13 @@ use anyhow::Result; use diesel::pg::PgConnection; +use regex::Regex; use super::entity::Paste; use super::postgres; pub fn create_paste(paste: &mut Paste, conn: &PgConnection) -> Result { - paste.is_url = Some(validator::validate_url(paste.content.clone())); + let re = Regex::new("^(https?://)?((([a-z\\d]([a-z\\d-]*[a-z\\d])*)\\.)+[a-z]{2,}|((\\d{1,3}\\.){3}\\d{1,3}))(:\\d+)?(/[-a-z\\d%_.~+]*)*(\\?[;&a-z\\d%_.~+=-]*)?(#[-a-z\\d_]*)?$").unwrap(); + paste.is_url = Some(re.is_match(&*paste.content.clone())); postgres::create_paste(paste, conn) }