fix: db pool optimisations and sqlx bump

This commit is contained in:
Lowder 2026-03-10 22:12:13 +05:00
parent 44cdf60599
commit af09831396
No known key found for this signature in database
GPG key ID: E63B80B1F1DC187C
8 changed files with 180 additions and 333 deletions

379
Cargo.lock generated
View file

@ -8,19 +8,6 @@ version = "2.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
[[package]]
name = "ahash"
version = "0.8.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75"
dependencies = [
"cfg-if",
"getrandom 0.3.4",
"once_cell",
"version_check",
"zerocopy",
]
[[package]]
name = "aho-corasick"
version = "1.1.4"
@ -120,7 +107,7 @@ checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -131,7 +118,7 @@ checksum = "9035ad2d096bed7955a320ee7e2230574d28fd3c3a0f186cbea1ff3c7eed5dbb"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -170,12 +157,6 @@ version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08606f8c3cbf4ce6ec8e28fb0014a2c086708fe954eaa885384a6165172e7e8"
[[package]]
name = "base64"
version = "0.21.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
[[package]]
name = "base64"
version = "0.22.1"
@ -338,10 +319,10 @@ version = "4.5.55"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a92793da1a46a5f2a02a6f4c46c6496b28c43638adea8306fcb0caa1634f24e5"
dependencies = [
"heck 0.5.0",
"heck",
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -356,6 +337,15 @@ version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b05b61dc5112cbb17e4b6cd61790d9845d13888356391624cbe7e41efeac1e75"
[[package]]
name = "concurrent-queue"
version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973"
dependencies = [
"crossbeam-utils",
]
[[package]]
name = "console"
version = "0.16.1"
@ -577,7 +567,7 @@ dependencies = [
"proc-macro2",
"proc-macro2-diagnostics",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -600,7 +590,7 @@ checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -639,10 +629,10 @@ version = "0.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a1e6a265c649f3f5979b601d26f1d05ada116434c87741c9493cb56218f76cbc"
dependencies = [
"heck 0.5.0",
"heck",
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -697,9 +687,14 @@ dependencies = [
[[package]]
name = "event-listener"
version = "2.5.3"
version = "5.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0"
checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab"
dependencies = [
"concurrent-queue",
"parking",
"pin-project-lite",
]
[[package]]
name = "fastrand"
@ -881,7 +876,7 @@ checksum = "e835b70203e41293343137df5c0664546da5745f82ec9b84d40be8336958447b"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -1044,22 +1039,14 @@ dependencies = [
"tracing",
]
[[package]]
name = "hashbrown"
version = "0.14.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
dependencies = [
"ahash",
"allocator-api2",
]
[[package]]
name = "hashbrown"
version = "0.15.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
dependencies = [
"allocator-api2",
"equivalent",
"foldhash",
]
@ -1071,20 +1058,11 @@ checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
[[package]]
name = "hashlink"
version = "0.8.4"
version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
dependencies = [
"hashbrown 0.14.5",
]
[[package]]
name = "heck"
version = "0.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8"
dependencies = [
"unicode-segmentation",
"hashbrown 0.15.5",
]
[[package]]
@ -1126,8 +1104,8 @@ dependencies = [
"once_cell",
"rand 0.9.2",
"ring",
"rustls 0.23.35",
"thiserror 2.0.18",
"rustls",
"thiserror",
"tinyvec",
"tokio",
"tokio-rustls",
@ -1151,9 +1129,9 @@ dependencies = [
"parking_lot",
"rand 0.9.2",
"resolv-conf",
"rustls 0.23.35",
"rustls",
"smallvec",
"thiserror 2.0.18",
"thiserror",
"tokio",
"tokio-rustls",
"tracing",
@ -1318,7 +1296,7 @@ dependencies = [
"http 1.4.0",
"hyper 1.8.1",
"hyper-util",
"rustls 0.23.35",
"rustls",
"rustls-pki-types",
"tokio",
"tokio-rustls",
@ -1348,7 +1326,7 @@ version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "52e9a2a24dc5c6821e71a7030e1e14b7b632acac55c40e9d2e082c621261bb56"
dependencies = [
"base64 0.22.1",
"base64",
"bytes",
"futures-channel",
"futures-core",
@ -1655,7 +1633,7 @@ checksum = "980af8b43c3ad5d8d349ace167ec8170839f753a42d233ba19e08afe1850fa69"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -1728,11 +1706,10 @@ dependencies = [
[[package]]
name = "libsqlite3-sys"
version = "0.27.0"
version = "0.30.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716"
checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149"
dependencies = [
"cc",
"pkg-config",
"vcpkg",
]
@ -1813,7 +1790,7 @@ dependencies = [
"log",
"memchr",
"serde",
"thiserror 2.0.18",
"thiserror",
]
[[package]]
@ -1838,12 +1815,6 @@ version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
[[package]]
name = "minimal-lexical"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
[[package]]
name = "miniz_oxide"
version = "0.8.9"
@ -1931,16 +1902,6 @@ dependencies = [
"tempfile",
]
[[package]]
name = "nom"
version = "7.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a"
dependencies = [
"memchr",
"minimal-lexical",
]
[[package]]
name = "normpath"
version = "1.5.0"
@ -2079,7 +2040,7 @@ checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -2100,6 +2061,12 @@ dependencies = [
"vcpkg",
]
[[package]]
name = "parking"
version = "2.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba"
[[package]]
name = "parking_lot"
version = "0.12.5"
@ -2158,7 +2125,7 @@ dependencies = [
"proc-macro2",
"proc-macro2-diagnostics",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -2206,7 +2173,7 @@ dependencies = [
"pest_meta",
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -2352,7 +2319,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "479ca8adacdd7ce8f1fb39ce9ecccbfe93a3f1344b3d0d97f20bc0196208f62b"
dependencies = [
"proc-macro2",
"syn 2.0.111",
"syn",
]
[[package]]
@ -2372,7 +2339,7 @@ checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
"version_check",
"yansi",
]
@ -2394,7 +2361,7 @@ dependencies = [
"reqwest",
"serde",
"serde_json",
"thiserror 2.0.18",
"thiserror",
"tokio",
"trie-rs",
"url",
@ -2412,9 +2379,9 @@ dependencies = [
"quinn-proto",
"quinn-udp",
"rustc-hash",
"rustls 0.23.35",
"rustls",
"socket2 0.6.1",
"thiserror 2.0.18",
"thiserror",
"tokio",
"tracing",
"web-time",
@ -2432,10 +2399,10 @@ dependencies = [
"rand 0.9.2",
"ring",
"rustc-hash",
"rustls 0.23.35",
"rustls",
"rustls-pki-types",
"slab",
"thiserror 2.0.18",
"thiserror",
"tinyvec",
"tracing",
"web-time",
@ -2581,7 +2548,7 @@ checksum = "b7186006dcb21920990093f30e3dea63b7d6e977bf1256be20c3563a5db070da"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -2646,7 +2613,7 @@ version = "0.12.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9d0946410b9f7b082a427e4ef5c8ff541a88b357bc6c637c40db3a68ac70a36f"
dependencies = [
"base64 0.22.1",
"base64",
"bytes",
"encoding_rs",
"futures-channel",
@ -2667,7 +2634,7 @@ dependencies = [
"percent-encoding",
"pin-project-lite",
"quinn",
"rustls 0.23.35",
"rustls",
"rustls-pki-types",
"serde",
"serde_json",
@ -2798,33 +2765,11 @@ dependencies = [
"proc-macro2",
"quote",
"rocket_http",
"syn 2.0.111",
"syn",
"unicode-xid",
"version_check",
]
[[package]]
name = "rocket_db_pools"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c6578b2740ceee3e78bff63fe9299d964b7e68318446cdcb9af3b9cab46e1e9d"
dependencies = [
"rocket",
"rocket_db_pools_codegen",
"sqlx",
"version_check",
]
[[package]]
name = "rocket_db_pools_codegen"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "842e859f2e87a23efc0f81e25756c0fb43f18726e62daf99da7ea19fbc56cebd"
dependencies = [
"devise",
"quote",
]
[[package]]
name = "rocket_dyn_templates"
version = "0.2.0"
@ -2913,17 +2858,6 @@ dependencies = [
"windows-sys 0.61.2",
]
[[package]]
name = "rustls"
version = "0.21.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f56a14d1f48b391359b22f731fd4bd7e43c97f3c50eee276f3aa09c94784d3e"
dependencies = [
"ring",
"rustls-webpki 0.101.7",
"sct",
]
[[package]]
name = "rustls"
version = "0.23.35"
@ -2934,20 +2868,11 @@ dependencies = [
"once_cell",
"ring",
"rustls-pki-types",
"rustls-webpki 0.103.8",
"rustls-webpki",
"subtle",
"zeroize",
]
[[package]]
name = "rustls-pemfile"
version = "1.0.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c74cae0a4cf6ccbbf5f359f08efdf8ee7e1dc532573bf0db71968cb56b1448c"
dependencies = [
"base64 0.21.7",
]
[[package]]
name = "rustls-pki-types"
version = "1.13.0"
@ -2958,16 +2883,6 @@ dependencies = [
"zeroize",
]
[[package]]
name = "rustls-webpki"
version = "0.101.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b6275d1ee7a1cd780b64aca7726599a1dbc893b1e64144529e55c3c2f745765"
dependencies = [
"ring",
"untrusted",
]
[[package]]
name = "rustls-webpki"
version = "0.103.8"
@ -3021,16 +2936,6 @@ version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]]
name = "sct"
version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "da046153aa2352493d6cb7da4b6e5c0c057d8a1d0a9aa8560baffdd945acd414"
dependencies = [
"ring",
"untrusted",
]
[[package]]
name = "security-framework"
version = "2.11.1"
@ -3087,7 +2992,7 @@ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -3213,6 +3118,9 @@ name = "smallvec"
version = "1.15.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
dependencies = [
"serde",
]
[[package]]
name = "socket2"
@ -3253,21 +3161,11 @@ dependencies = [
"der",
]
[[package]]
name = "sqlformat"
version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790"
dependencies = [
"nom",
"unicode_categories",
]
[[package]]
name = "sqlx"
version = "0.7.4"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa"
checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc"
dependencies = [
"sqlx-core",
"sqlx-macros",
@ -3278,70 +3176,62 @@ dependencies = [
[[package]]
name = "sqlx-core"
version = "0.7.4"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6"
checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6"
dependencies = [
"ahash",
"atoi",
"byteorder",
"base64",
"bytes",
"chrono",
"crc",
"crossbeam-queue",
"either",
"event-listener",
"futures-channel",
"futures-core",
"futures-intrusive",
"futures-io",
"futures-util",
"hashbrown 0.15.5",
"hashlink",
"hex",
"indexmap",
"log",
"memchr",
"once_cell",
"paste",
"percent-encoding",
"rustls 0.21.12",
"rustls-pemfile",
"serde",
"serde_json",
"sha2",
"smallvec",
"sqlformat",
"thiserror 1.0.69",
"thiserror",
"tokio",
"tokio-stream",
"tracing",
"url",
"uuid",
"webpki-roots 0.25.4",
]
[[package]]
name = "sqlx-macros"
version = "0.7.4"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127"
checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d"
dependencies = [
"proc-macro2",
"quote",
"sqlx-core",
"sqlx-macros-core",
"syn 1.0.109",
"syn",
]
[[package]]
name = "sqlx-macros-core"
version = "0.7.4"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8"
checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b"
dependencies = [
"dotenvy",
"either",
"heck 0.4.1",
"heck",
"hex",
"once_cell",
"proc-macro2",
@ -3353,20 +3243,19 @@ dependencies = [
"sqlx-mysql",
"sqlx-postgres",
"sqlx-sqlite",
"syn 1.0.109",
"tempfile",
"syn",
"tokio",
"url",
]
[[package]]
name = "sqlx-mysql"
version = "0.7.4"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418"
checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526"
dependencies = [
"atoi",
"base64 0.21.7",
"base64",
"bitflags 2.10.0",
"byteorder",
"bytes",
@ -3397,7 +3286,7 @@ dependencies = [
"smallvec",
"sqlx-core",
"stringprep",
"thiserror 1.0.69",
"thiserror",
"tracing",
"uuid",
"whoami",
@ -3405,12 +3294,12 @@ dependencies = [
[[package]]
name = "sqlx-postgres"
version = "0.7.4"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e"
checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46"
dependencies = [
"atoi",
"base64 0.21.7",
"base64",
"bitflags 2.10.0",
"byteorder",
"chrono",
@ -3419,7 +3308,6 @@ dependencies = [
"etcetera",
"futures-channel",
"futures-core",
"futures-io",
"futures-util",
"hex",
"hkdf",
@ -3437,7 +3325,7 @@ dependencies = [
"smallvec",
"sqlx-core",
"stringprep",
"thiserror 1.0.69",
"thiserror",
"tracing",
"uuid",
"whoami",
@ -3445,9 +3333,9 @@ dependencies = [
[[package]]
name = "sqlx-sqlite"
version = "0.7.4"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa"
checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea"
dependencies = [
"atoi",
"chrono",
@ -3461,10 +3349,11 @@ dependencies = [
"log",
"percent-encoding",
"serde",
"serde_urlencoded",
"sqlx-core",
"thiserror",
"tracing",
"url",
"urlencoding",
"uuid",
]
@ -3515,17 +3404,6 @@ version = "2.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "1.0.109"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "syn"
version = "2.0.111"
@ -3554,7 +3432,7 @@ checksum = "728a70f3dbaf5bab7f0c4b1ac8d7ae5ea60a4b5549c8a5914361c99147a709d2"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -3630,33 +3508,13 @@ dependencies = [
"unicode-segmentation",
]
[[package]]
name = "thiserror"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
dependencies = [
"thiserror-impl 1.0.69",
]
[[package]]
name = "thiserror"
version = "2.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4288b5bcbc7920c07a1149a35cf9590a2aa808e0bc1eafaade0b80947865fbc4"
dependencies = [
"thiserror-impl 2.0.18",
]
[[package]]
name = "thiserror-impl"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"thiserror-impl",
]
[[package]]
@ -3667,7 +3525,7 @@ checksum = "ebc4ee7f67670e9b64d05fa4253e753e016c6c95ff35b89b7941d6b856dec1d5"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -3760,7 +3618,7 @@ checksum = "af407857209536a95c8e56f8231ef2c2e2aff839b22e07a1ffcbc617e9db9fa5"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -3779,7 +3637,7 @@ version = "0.26.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1729aa945f29d91ba541258c8df89027d5792d85a8841fb65e8bf0f4ede4ef61"
dependencies = [
"rustls 0.23.35",
"rustls",
"tokio",
]
@ -3913,7 +3771,7 @@ checksum = "81383ab64e72a7a8b8e13130c49e3dab29def6d0c7d76a03087b3cf71c5c6903"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -4046,12 +3904,6 @@ version = "0.2.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853"
[[package]]
name = "unicode_categories"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e"
[[package]]
name = "unit-prefix"
version = "0.5.2"
@ -4076,12 +3928,6 @@ dependencies = [
"serde",
]
[[package]]
name = "urlencoding"
version = "2.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da"
[[package]]
name = "utf8_iter"
version = "1.0.4"
@ -4217,7 +4063,7 @@ dependencies = [
"bumpalo",
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
"wasm-bindgen-shared",
]
@ -4297,12 +4143,6 @@ dependencies = [
"wasm-bindgen",
]
[[package]]
name = "webpki-roots"
version = "0.25.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f20c57d8d7db6d3b86154206ae5d8fba62dd39573114de97c2cb0578251f8e1"
[[package]]
name = "webpki-roots"
version = "0.26.11"
@ -4323,7 +4163,7 @@ dependencies = [
[[package]]
name = "website"
version = "0.4.1"
version = "0.4.2"
dependencies = [
"dotenvy",
"env_logger",
@ -4335,7 +4175,6 @@ dependencies = [
"rocket",
"rocket-cache-response",
"rocket-client-addr",
"rocket_db_pools",
"rocket_dyn_templates",
"serde",
"sqlx",
@ -4397,7 +4236,7 @@ checksum = "053e2e040ab57b9dc951b72c264860db7eb3b0200ba345b4e4c3b14f67855ddf"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -4408,7 +4247,7 @@ checksum = "3f316c4a2570ba26bbec722032c4099d8c8bc095efccdc15688708623367e358"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -4718,7 +4557,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ea61de684c3ea68cb082b7a88508a8b27fcc8b797d738bfc99a82facf1d752dc"
dependencies = [
"anyhow",
"heck 0.5.0",
"heck",
"wit-parser",
]
@ -4729,10 +4568,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b7c566e0f4b284dd6561c786d9cb0142da491f46a9fbed79ea69cdad5db17f21"
dependencies = [
"anyhow",
"heck 0.5.0",
"heck",
"indexmap",
"prettyplease",
"syn 2.0.111",
"syn",
"wasm-metadata",
"wit-bindgen-core",
"wit-component",
@ -4748,7 +4587,7 @@ dependencies = [
"prettyplease",
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
"wit-bindgen-core",
"wit-bindgen-rust",
]
@ -4834,7 +4673,7 @@ checksum = "b659052874eb698efe5b9e8cf382204678a0086ebf46982b79d6ca3182927e5d"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
"synstructure",
]
@ -4855,7 +4694,7 @@ checksum = "cf955aa904d6040f70dc8e9384444cb1030aed272ba3cb09bbc4ab9e7c1f34f5"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]
@ -4875,7 +4714,7 @@ checksum = "d71e5d6e06ab090c67b5e44993ec16b72dcbaabc526db883a360057678b48502"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
"synstructure",
]
@ -4915,7 +4754,7 @@ checksum = "eadce39539ca5cb3985590102671f2567e659fca9666581ad3411d59207951f3"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.111",
"syn",
]
[[package]]

View file

@ -0,0 +1,12 @@
{
"db_name": "PostgreSQL",
"query": "REFRESH MATERIALIZED VIEW CONCURRENTLY whitelist",
"describe": {
"columns": [],
"parameters": {
"Left": []
},
"nullable": []
},
"hash": "4e4d001cdcd7dde4c74b7a51538911a7c276406239ba422947945d8f3242b579"
}

View file

@ -1,12 +0,0 @@
{
"db_name": "PostgreSQL",
"query": "REFRESH MATERIALIZED VIEW whitelist",
"describe": {
"columns": [],
"parameters": {
"Left": []
},
"nullable": []
},
"hash": "ea9307414ca1375dea4b9ef49ddfb0d679bbd6971b2ca75d25fbaf6fdc04951d"
}

View file

@ -1,13 +1,12 @@
[package]
name = "website"
version = "0.4.1"
version = "0.4.2"
edition = "2024"
[dependencies]
rocket = { version = "0.5.1", features = ["msgpack", "json"] }
rocket_db_pools = { version = "0.2.0", features = ["sqlx_postgres"]}
rocket_dyn_templates = { version = "0.2.0", features = ["tera"] }
sqlx = { version = "0.7", features = ["runtime-tokio", "postgres", "migrate", "chrono", "uuid"] }
sqlx = { version = "0.8.6", features = ["runtime-tokio", "postgres", "migrate", "chrono", "uuid"] }
rocket-client-addr = "0.5.4"
serde = { workspace = true }
reports = { path = "../reports" }

View file

@ -1,12 +1,12 @@
use crate::Db;
use reports::AgencyReport;
use rocket::http::Status;
use rocket::serde::json::serde_json::json;
use rocket::serde::json::{Json, Value};
use rocket::serde::msgpack::MsgPack;
use rocket_client_addr::ClientRealAddr;
use rocket_db_pools::Connection;
use rocket::State;
use sqlx::Acquire;
use sqlx::postgres::PgPool;
pub struct Agency {
pub id: i32,
@ -18,8 +18,9 @@ pub async fn upload_report(
report: MsgPack<AgencyReport>,
addr: &ClientRealAddr,
agency: Agency,
mut db: Connection<Db>,
pool: &State<PgPool>,
) -> Result<Json<Value>, (Status, String)> {
let mut db = pool.acquire().await.map_err(|e| (Status::InternalServerError, e.to_string()))?;
let mut tx = db
.begin()
.await
@ -72,7 +73,7 @@ pub async fn upload_report(
.await
.map_err(|e| (Status::InternalServerError, e.to_string()))?;
sqlx::query!("REFRESH MATERIALIZED VIEW whitelist")
sqlx::query!("REFRESH MATERIALIZED VIEW CONCURRENTLY whitelist")
.execute(&mut *tx)
.await
.map_err(|e| (Status::InternalServerError, e.to_string()))?;

View file

@ -1,20 +1,18 @@
use crate::agency::Agency;
use crate::Db;
use querying::target::Target;
use querying::{Check, CheckVerdict, Checker};
use rocket::http::Status;
use rocket::outcome::{try_outcome, IntoOutcome};
use rocket::request::{FromRequest, Outcome};
use rocket::tokio::sync::RwLockReadGuard;
use rocket::Request;
use rocket::{Request, State};
use rocket_client_addr::ClientRealAddr;
use rocket_db_pools::Connection;
use serde::Serialize;
use sqlx::types::chrono::NaiveDateTime;
use sqlx::types::Uuid;
pub async fn save_query(
db: &mut Connection<Db>,
db: &mut sqlx::PgConnection,
target: &Target,
check: &Check,
addr: &ClientRealAddr,
@ -83,7 +81,7 @@ pub async fn save_query(
.bind(cdn_networks)
.bind(cdn_providers)
.bind(rkn_domain)
.fetch_one(&mut ***db)
.fetch_one(db)
.await?;
Ok(id)
@ -91,10 +89,15 @@ pub async fn save_query(
#[rocket::async_trait]
impl<'r> FromRequest<'r> for Agency {
type Error = Option<rocket_db_pools::Error<sqlx::Error>>;
type Error = Option<sqlx::Error>;
async fn from_request(request: &'r Request<'_>) -> Outcome<Self, Self::Error> {
let mut db = try_outcome!(Connection::<Db>::from_request(request).await);
let pool = request.guard::<&State<sqlx::PgPool>>().await.unwrap();
let mut db = try_outcome!(pool
.acquire()
.await
.map_err(|e| Some(e))
.or_forward(Status::InternalServerError));
let token = request.headers().get_one("Authorization");
let token = try_outcome!(
@ -106,9 +109,9 @@ impl<'r> FromRequest<'r> for Agency {
let agency = try_outcome!(
sqlx::query!("SELECT id, name FROM reporters WHERE token = $1", token)
.fetch_optional(&mut **db)
.fetch_optional(&mut *db)
.await
.map_err(|e| Some(rocket_db_pools::Error::Get(e)))
.map_err(|e| Some(e))
.or_forward(Status::InternalServerError)
);
agency
@ -129,7 +132,7 @@ pub struct WhitelistedEntry {
pub async fn check_whitelist(
domain: &str,
db: &mut Connection<Db>,
db: &mut sqlx::PgConnection,
) -> Result<Option<WhitelistedEntry>, sqlx::Error> {
if domain.chars().filter(|c| *c == '.').count() > 4 {
return Ok(None);
@ -144,7 +147,7 @@ pub async fn check_whitelist(
LIMIT 1",
domain
)
.fetch_optional(&mut ***db)
.fetch_optional(db)
.await
.into()
}
@ -158,7 +161,7 @@ pub struct WhitelistHistogramBin {
}
pub async fn collect_histogram(
db: &mut Connection<Db>,
db: &mut sqlx::PgConnection,
bins: i32,
limit: i32,
filter: bool,
@ -180,7 +183,7 @@ LEFT JOIN whitelist w
GROUP BY b.bin
ORDER BY b.bin;", bins, limit / bins, filter
)
.fetch_all(&mut ***db)
.fetch_all(db)
.await
.into()
}

View file

@ -4,8 +4,8 @@ mod agency;
mod db;
mod whitelist;
use crate::db::{check_whitelist, save_query};
use log::error;
use crate::db::{check_whitelist, save_query, WhitelistedEntry};
use log::{error, info, warn};
use querying::resolver::Resolver;
use querying::target::Target;
use querying::{Check, CheckError, CheckVerdict, Checker};
@ -18,7 +18,6 @@ use rocket::tokio::time;
use rocket::{fairing, tokio, Build, Request, Rocket, State};
use rocket_cache_response::CacheResponse;
use rocket_client_addr::ClientRealAddr;
use rocket_db_pools::{Connection, Database};
use rocket_dyn_templates::{context, Metadata, Template};
use serde::Serialize;
use std::path::PathBuf;
@ -26,10 +25,7 @@ use std::sync::Arc;
use std::time::Duration;
use rocket::serde::json::Json;
use sqlx::types::Uuid;
#[derive(rocket_db_pools::Database)]
#[database("cheburcheck")]
struct Db(sqlx::PgPool);
use sqlx::postgres::PgPool;
#[derive(Serialize)]
struct GlobalContext {
@ -83,13 +79,13 @@ async fn healthcheck(checker: &State<Arc<RwLock<Checker>>>) -> (Status, String)
}
#[post("/feedback/<uuid>/<works>")]
async fn feedback(uuid: &str, works: bool, mut db: Connection<Db>, addr: &ClientRealAddr) -> Result<(), Status> {
async fn feedback(uuid: &str, works: bool, pool: &State<PgPool>, addr: &ClientRealAddr) -> Result<(), Status> {
sqlx::query!(
"INSERT INTO human_reports (id, source_ip, works) VALUES ($1, $2, $3)",
Uuid::try_parse(uuid).map_err(|_| Status::BadRequest)?,
addr.ip.to_string(),
works
).execute(&mut **db).await.map_err(|_| Status::InternalServerError)?;
).execute(&**pool).await.map_err(|_| Status::InternalServerError)?;
Ok(())
}
@ -99,12 +95,15 @@ async fn check(
target: &str,
checker: &State<Arc<RwLock<Checker>>>,
addr: &ClientRealAddr,
mut db: Connection<Db>,
pool: &State<PgPool>,
) -> Result<Template, Status> {
let target = Target::from(target.trim());
let check = checker.read().await.check(target.clone()).await;
let id = if let Ok(check) = &check {
match save_query(&mut db, &target, check, addr, checker.read().await).await {
let mut db = pool.acquire().await.map_err(|_| Status::InternalServerError)?;
let id: Option<String> = if let Ok(check) = &check {
match save_query(&mut *db, &target, check, addr, checker.read().await).await {
Ok(id) => Some(id.to_string()),
Err(e) => {
warn!("Failed to save check: {:?}", e);
@ -115,8 +114,8 @@ async fn check(
None
};
let whitelist = if let Target::Domain(domain) = &target {
check_whitelist(domain, &mut db)
let whitelist: Option<WhitelistedEntry> = if let Target::Domain(domain) = &target {
check_whitelist(domain, &mut *db)
.await
.map_err(|_| Status::InternalServerError)?
} else {
@ -254,8 +253,8 @@ fn format_number(number: usize) -> String {
}
async fn run_migrations(rocket: Rocket<Build>) -> fairing::Result {
match Db::fetch(&rocket) {
Some(db) => match sqlx::migrate!("./migrations").run(&**db).await {
match rocket.state::<PgPool>() {
Some(db) => match sqlx::migrate!("./migrations").run(db).await {
Ok(_) => Ok(rocket),
Err(e) => {
error!("Failed to run database migrations: {}", e);
@ -288,27 +287,30 @@ async fn rocket() -> _ {
info!("Refreshing DB every {:?}", interval.period());
loop {
interval.tick().await;
log::info!("Updating all DBs");
info!("Updating all DBs");
match Checker::download_all().await {
Ok(bases) => {
log::info!("Downloaded, updating...");
info!("Downloaded, updating...");
checker_clone.read().await.update_all(bases).await;
log::info!("Updated databases");
info!("Updated databases");
},
Err(e) => log::error!("Failed to download all DBs"),
}
}
});
let figment = rocket::Config::figment().merge((
"databases.cheburcheck.url",
dotenvy::var("DATABASE_URL").expect("DATABASE_URL must be set"),
));
let pool = sqlx::postgres::PgPoolOptions::new()
.max_connections(100)
.acquire_timeout(Duration::from_secs(5))
.idle_timeout(Duration::from_secs(60))
.connect(&dotenvy::var("DATABASE_URL").expect("DATABASE_URL must be set"))
.await
.expect("Failed to create database pool");
rocket::custom(figment)
rocket::build()
.manage(Resolver::new().await)
.manage(checker)
.attach(Db::init())
.manage(pool)
.attach(AdHoc::try_on_ignite("SQLx Migrations", run_migrations))
.mount("/", routes![index, check, healthcheck, page, feedback])
.mount("/vendor", routes![lucide, chartjs, chartjs_datalabels])

View file

@ -1,12 +1,12 @@
use crate::Db;
use rocket::futures::StreamExt;
use rocket::http::{ContentType, Status};
use rocket::request::FromParam;
use rocket_cache_response::CacheResponse;
use rocket_db_pools::Connection;
use rocket::State;
use std::io;
use rocket::serde::json::Json;
use crate::db::{collect_histogram, WhitelistHistogramBin};
use sqlx::postgres::PgPool;
enum ExportType {
Full,
@ -28,7 +28,7 @@ impl<'r> FromParam<'r> for ExportType {
#[get("/<export_type>")]
pub async fn export_csv(
export_type: ExportType,
mut db: Connection<Db>,
pool: &State<PgPool>,
) -> Result<CacheResponse<(ContentType, Vec<u8>)>, io::Error> {
let query = match export_type {
ExportType::Full => {
@ -39,6 +39,8 @@ pub async fn export_csv(
}
};
let mut db = pool.acquire().await.map_err(|e| io::Error::new(io::ErrorKind::Other, e))?;
let mut stream = db
.copy_out_raw(query)
.await
@ -59,8 +61,9 @@ pub async fn export_csv(
}
#[get("/histogram?<filter>&<limit>")]
pub async fn histogram(mut db: Connection<Db>, filter: Option<bool>, limit: Option<i32>) -> Result<Json<Vec<WhitelistHistogramBin>>, Status> {
pub async fn histogram(pool: &State<PgPool>, filter: Option<bool>, limit: Option<i32>) -> Result<Json<Vec<WhitelistHistogramBin>>, Status> {
let limit = limit.unwrap_or(100_000).clamp(0, 1_000_000);
Ok(Json(collect_histogram(&mut db, 50, limit, filter.is_some()).await
.map_err(|e| Status::InternalServerError)?))
let mut db = pool.acquire().await.map_err(|_| Status::InternalServerError)?;
Ok(Json(collect_histogram(&mut *db, 50, limit, filter.is_some()).await
.map_err(|_| Status::InternalServerError)?))
}