From 2f7eab29daed2fe6f1833b539539e0056cfb9abf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Charlotte=20=F0=9F=A6=9D=20Delenk?= Date: Wed, 4 Dec 2024 10:36:48 +0100 Subject: [PATCH] clean up sessions that are not in use --- Cargo.lock | 149 ++++---- Cargo.nix | 335 ++++++++---------- Cargo.toml | 3 +- chir-rs-client/src/main.rs | 2 +- ...b9731f98e1e9d8d9122cc8c7e63773fcb5bf2.json | 14 + ...313e0b0701ae34c1e609f3f92a4009d6ee4b3.json | 15 + ...18e3b338e0b2652d5869a9901390c41f58b65.json | 15 + chir-rs-db/Cargo.toml | 4 +- ...20241204073434_roll-custom-session-ids.sql | 26 ++ chir-rs-db/src/lib.rs | 1 + chir-rs-db/src/session.rs | 46 +++ chir-rs-db/src/user.rs | 16 +- chir-rs-http-api/src/auth/mod.rs | 5 +- chir-rs-http/Cargo.toml | 7 +- src/main.rs | 42 ++- 15 files changed, 389 insertions(+), 291 deletions(-) create mode 100644 chir-rs-db/.sqlx/query-20689c3363e0c27e4664c608378b9731f98e1e9d8d9122cc8c7e63773fcb5bf2.json create mode 100644 chir-rs-db/.sqlx/query-59ecfc0f3f0a721ba2fb8b4a953313e0b0701ae34c1e609f3f92a4009d6ee4b3.json create mode 100644 chir-rs-db/.sqlx/query-c086da344a6da521e817bcecf4318e3b338e0b2652d5869a9901390c41f58b65.json create mode 100644 chir-rs-db/migrations/20241204073434_roll-custom-session-ids.sql create mode 100644 chir-rs-db/src/session.rs diff --git a/Cargo.lock b/Cargo.lock index 39589db..381bace 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -228,7 +228,7 @@ dependencies = [ "aws-sdk-sts", "aws-smithy-async", "aws-smithy-http", - "aws-smithy-json", + "aws-smithy-json 0.60.7", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -285,9 +285,9 @@ dependencies = [ [[package]] name = "aws-runtime" -version = "1.4.3" +version = "1.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a10d5c055aa540164d9561a0e2e74ad30f0dcf7393c3a92f6733ddf9c5762468" +checksum = "b5ac934720fbb46206292d2c75b57e67acfc56fe7dfd34fb9a02334af08409ea" dependencies = [ "aws-credential-types", "aws-sigv4", @@ -311,9 +311,9 @@ dependencies = [ [[package]] name = "aws-sdk-s3" -version = "1.64.0" +version = "1.65.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "35fe5e7f71b1cc6274e905d3bcc7daf94099ac2d4cba83447ffb959b5b27b3c1" +checksum = "d3ba2c5c0f2618937ce3d4a5ad574b86775576fa24006bcb3128c6e2cbf3c34e" dependencies = [ "aws-credential-types", "aws-runtime", @@ -322,7 +322,7 @@ dependencies = [ "aws-smithy-checksums", "aws-smithy-eventstream", "aws-smithy-http", - "aws-smithy-json", + "aws-smithy-json 0.61.1", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -345,15 +345,15 @@ dependencies = [ [[package]] name = "aws-sdk-sso" -version = "1.49.0" +version = "1.50.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09677244a9da92172c8dc60109b4a9658597d4d298b188dd0018b6a66b410ca4" +checksum = "05ca43a4ef210894f93096039ef1d6fa4ad3edfabb3be92b80908b9f2e4b4eab" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", "aws-smithy-http", - "aws-smithy-json", + "aws-smithy-json 0.61.1", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -367,15 +367,15 @@ dependencies = [ [[package]] name = "aws-sdk-ssooidc" -version = "1.50.0" +version = "1.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "81fea2f3a8bb3bd10932ae7ad59cc59f65f270fc9183a7e91f501dc5efbef7ee" +checksum = "abaf490c2e48eed0bb8e2da2fb08405647bd7f253996e0f93b981958ea0f73b0" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", "aws-smithy-http", - "aws-smithy-json", + "aws-smithy-json 0.61.1", "aws-smithy-runtime", "aws-smithy-runtime-api", "aws-smithy-types", @@ -389,15 +389,15 @@ dependencies = [ [[package]] name = "aws-sdk-sts" -version = "1.50.0" +version = "1.51.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ada54e5f26ac246dc79727def52f7f8ed38915cb47781e2a72213957dc3a7d5" +checksum = "b68fde0d69c8bfdc1060ea7da21df3e39f6014da316783336deff0a9ec28f4bf" dependencies = [ "aws-credential-types", "aws-runtime", "aws-smithy-async", "aws-smithy-http", - "aws-smithy-json", + "aws-smithy-json 0.61.1", "aws-smithy-query", "aws-smithy-runtime", "aws-smithy-runtime-api", @@ -412,9 +412,9 @@ dependencies = [ [[package]] name = "aws-sigv4" -version = "1.2.5" +version = "1.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5619742a0d8f253be760bfbb8e8e8368c69e3587e4637af5754e488a611499b1" +checksum = "7d3820e0c08d0737872ff3c7c1f21ebbb6693d832312d6152bf18ef50a5471c2" dependencies = [ "aws-credential-types", "aws-smithy-eventstream", @@ -427,7 +427,7 @@ dependencies = [ "hex", "hmac", "http 0.2.12", - "http 1.1.0", + "http 1.2.0", "once_cell", "p256", "percent-encoding", @@ -512,6 +512,15 @@ dependencies = [ "aws-smithy-types", ] +[[package]] +name = "aws-smithy-json" +version = "0.61.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee4e69cc50921eb913c6b662f8d909131bb3e6ad6cb6090d3a39b66fc5c52095" +dependencies = [ + "aws-smithy-types", +] + [[package]] name = "aws-smithy-query" version = "0.60.7" @@ -524,9 +533,9 @@ dependencies = [ [[package]] name = "aws-smithy-runtime" -version = "1.7.3" +version = "1.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be28bd063fa91fd871d131fc8b68d7cd4c5fa0869bea68daca50dcb1cbd76be2" +checksum = "9f20685047ca9d6f17b994a07f629c813f08b5bce65523e47124879e60103d45" dependencies = [ "aws-smithy-async", "aws-smithy-http", @@ -559,7 +568,7 @@ dependencies = [ "aws-smithy-types", "bytes", "http 0.2.12", - "http 1.1.0", + "http 1.2.0", "pin-project-lite", "tokio", "tracing", @@ -577,7 +586,7 @@ dependencies = [ "bytes-utils", "futures-core", "http 0.2.12", - "http 1.1.0", + "http 1.2.0", "http-body 0.4.6", "http-body 1.0.1", "http-body-util", @@ -625,7 +634,7 @@ dependencies = [ "axum-core", "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "hyper 1.5.1", @@ -649,17 +658,6 @@ dependencies = [ "tracing", ] -[[package]] -name = "axum-client-ip" -version = "0.6.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac" -dependencies = [ - "axum", - "forwarded-header-value", - "serde", -] - [[package]] name = "axum-core" version = "0.4.5" @@ -669,7 +667,7 @@ dependencies = [ "async-trait", "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "mime", @@ -690,7 +688,7 @@ dependencies = [ "axum", "bytes", "futures-core", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "matchit", "metrics", @@ -934,6 +932,7 @@ dependencies = [ "sentry-eyre", "sentry-tracing", "tokio", + "tracing", "tracing-error", "tracing-subscriber", ] @@ -986,8 +985,10 @@ dependencies = [ "bincode", "blake3", "chir-rs-http-api", + "chir-rs-misc", "eyre", "mime", + "rand", "serde", "sqlx", "tokio", @@ -1016,10 +1017,8 @@ version = "0.1.0" dependencies = [ "argon2", "axum", - "axum-client-ip", "axum-prometheus", "b64-ct", - "base64 0.22.1", "bincode", "chir-rs-castore", "chir-rs-config", @@ -1048,10 +1047,10 @@ dependencies = [ "bytes", "educe", "eyre", - "http 1.1.0", + "http 1.2.0", "mime", "serde", - "thiserror 2.0.3", + "thiserror 2.0.4", "tracing", ] @@ -1101,9 +1100,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.21" +version = "4.5.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +checksum = "69371e34337c4c984bbe322360c2547210bf632eb2814bbe78a6e87a2935bd2b" dependencies = [ "clap_builder", "clap_derive", @@ -1111,9 +1110,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.21" +version = "4.5.22" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +checksum = "6e24c1b4099818523236a8ca881d2b45db98dadfb4625cf6608c12069fcbbde1" dependencies = [ "anstream", "anstyle", @@ -1615,16 +1614,6 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "forwarded-header-value" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9" -dependencies = [ - "nonempty", - "thiserror 1.0.69", -] - [[package]] name = "fs_extra" version = "1.3.0" @@ -1817,7 +1806,7 @@ dependencies = [ "fnv", "futures-core", "futures-sink", - "http 1.1.0", + "http 1.2.0", "indexmap", "slab", "tokio", @@ -1930,9 +1919,9 @@ dependencies = [ [[package]] name = "http" -version = "1.1.0" +version = "1.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +checksum = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea" dependencies = [ "bytes", "fnv", @@ -1957,7 +1946,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" dependencies = [ "bytes", - "http 1.1.0", + "http 1.2.0", ] [[package]] @@ -1968,7 +1957,7 @@ checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" dependencies = [ "bytes", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "pin-project-lite", ] @@ -2019,7 +2008,7 @@ dependencies = [ "futures-channel", "futures-util", "h2 0.4.7", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "httparse", "httpdate", @@ -2053,7 +2042,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "08afdbb5c31130e3034af566421053ab03787c640246a446327f550d11bcb333" dependencies = [ "futures-util", - "http 1.1.0", + "http 1.2.0", "hyper 1.5.1", "hyper-util", "rustls 0.23.19", @@ -2073,7 +2062,7 @@ dependencies = [ "bytes", "futures-channel", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "hyper 1.5.1", "pin-project-lite", @@ -2528,12 +2517,6 @@ dependencies = [ "minimal-lexical", ] -[[package]] -name = "nonempty" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7" - [[package]] name = "nu-ansi-term" version = "0.46.0" @@ -2890,7 +2873,7 @@ dependencies = [ "rustc-hash 2.1.0", "rustls 0.23.19", "socket2", - "thiserror 2.0.3", + "thiserror 2.0.4", "tokio", "tracing", ] @@ -2909,7 +2892,7 @@ dependencies = [ "rustls 0.23.19", "rustls-pki-types", "slab", - "thiserror 2.0.3", + "thiserror 2.0.4", "tinyvec", "tracing", "web-time", @@ -3057,7 +3040,7 @@ dependencies = [ "futures-channel", "futures-core", "futures-util", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "hyper 1.5.1", @@ -3485,7 +3468,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6c90802b38c899a2c9e557dff25ad186362eddf755d5f5244001b172dd03bead" dependencies = [ "axum", - "http 1.1.0", + "http 1.2.0", "pin-project", "sentry-core", "tower-layer", @@ -4029,11 +4012,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +checksum = "2f49a1853cf82743e3b7950f77e0f4d622ca36cf4317cba00c767838bac8d490" dependencies = [ - "thiserror-impl 2.0.3", + "thiserror-impl 2.0.4", ] [[package]] @@ -4049,9 +4032,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.3" +version = "2.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +checksum = "8381894bb3efe0c4acac3ded651301ceee58a15d47c2e34885ed1908ad667061" dependencies = [ "proc-macro2", "quote", @@ -4126,9 +4109,9 @@ checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" [[package]] name = "tokio" -version = "1.41.1" +version = "1.42.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" dependencies = [ "backtrace", "bytes", @@ -4266,7 +4249,7 @@ checksum = "1e9cd434a998747dd2c4276bc96ee2e0c7a2eadf3cae88e52be55a05fa9053f5" dependencies = [ "bitflags", "bytes", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "http-body-util", "pin-project-lite", @@ -4282,7 +4265,7 @@ checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" dependencies = [ "bitflags", "bytes", - "http 1.1.0", + "http 1.2.0", "http-body 1.0.1", "pin-project-lite", "tower-layer", @@ -4465,9 +4448,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" [[package]] name = "ureq" -version = "2.10.1" +version = "2.12.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a" +checksum = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d" dependencies = [ "base64 0.22.1", "log", diff --git a/Cargo.nix b/Cargo.nix index 49d1184..77d057c 100644 --- a/Cargo.nix +++ b/Cargo.nix @@ -32,7 +32,7 @@ args@{ ignoreLockHash, }: let - nixifiedLockHash = "234b56dfc4b59e0b26044b6263573e725aa8e1a11bf1d349c799223f090b8c26"; + nixifiedLockHash = "11a64cfe7de901d3281b189f031b32ae0457044c4134a845d433d25e040d5018"; workspaceSrc = if args.workspaceSrc == null then ./. else args.workspaceSrc; currentLockHash = builtins.hashFile "sha256" (workspaceSrc + /Cargo.lock); lockHashIgnored = @@ -674,19 +674,19 @@ else inherit profileName; }).out; aws_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.4" { inherit profileName; }).out; aws_sdk_sso = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-sso."1.49.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-sso."1.50.0" { inherit profileName; }).out; aws_sdk_ssooidc = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-ssooidc."1.50.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-ssooidc."1.51.0" { inherit profileName; }).out; aws_sdk_sts = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-sts."1.50.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-sts."1.51.0" { inherit profileName; }).out; aws_smithy_async = @@ -702,7 +702,7 @@ else inherit profileName; }).out; aws_smithy_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.4" { inherit profileName; }).out; aws_smithy_runtime_api = @@ -742,7 +742,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tracing = @@ -898,15 +898,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.3" = + "registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.4" = overridableMkRustCrate (profileName: rec { name = "aws-runtime"; - version = "1.4.3"; + version = "1.4.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "a10d5c055aa540164d9561a0e2e74ad30f0dcf7393c3a92f6733ddf9c5762468"; + sha256 = "b5ac934720fbb46206292d2c75b57e67acfc56fe7dfd34fb9a02334af08409ea"; }; features = builtins.concatLists [ [ "event-stream" ] @@ -919,7 +919,7 @@ else inherit profileName; }).out; aws_sigv4 = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sigv4."1.2.5" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sigv4."1.2.6" { inherit profileName; }).out; aws_smithy_async = @@ -936,7 +936,7 @@ else inherit profileName; }).out; aws_smithy_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.4" { inherit profileName; }).out; aws_smithy_runtime_api = @@ -990,15 +990,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".aws-sdk-s3."1.64.0" = + "registry+https://github.com/rust-lang/crates.io-index".aws-sdk-s3."1.65.0" = overridableMkRustCrate (profileName: rec { name = "aws-sdk-s3"; - version = "1.64.0"; + version = "1.65.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "35fe5e7f71b1cc6274e905d3bcc7daf94099ac2d4cba83447ffb959b5b27b3c1"; + sha256 = "d3ba2c5c0f2618937ce3d4a5ad574b86775576fa24006bcb3128c6e2cbf3c34e"; }; features = builtins.concatLists [ [ "default" ] @@ -1012,11 +1012,11 @@ else inherit profileName; }).out; aws_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.4" { inherit profileName; }).out; aws_sigv4 = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sigv4."1.2.5" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sigv4."1.2.6" { inherit profileName; }).out; aws_smithy_async = @@ -1037,11 +1037,11 @@ else inherit profileName; }).out; aws_smithy_json = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-json."0.60.7" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-json."0.61.1" { inherit profileName; }).out; aws_smithy_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.4" { inherit profileName; }).out; aws_smithy_runtime_api = @@ -1115,15 +1115,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".aws-sdk-sso."1.49.0" = + "registry+https://github.com/rust-lang/crates.io-index".aws-sdk-sso."1.50.0" = overridableMkRustCrate (profileName: rec { name = "aws-sdk-sso"; - version = "1.49.0"; + version = "1.50.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "09677244a9da92172c8dc60109b4a9658597d4d298b188dd0018b6a66b410ca4"; + sha256 = "05ca43a4ef210894f93096039ef1d6fa4ad3edfabb3be92b80908b9f2e4b4eab"; }; dependencies = { aws_credential_types = @@ -1131,7 +1131,7 @@ else inherit profileName; }).out; aws_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.4" { inherit profileName; }).out; aws_smithy_async = @@ -1143,11 +1143,11 @@ else inherit profileName; }).out; aws_smithy_json = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-json."0.60.7" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-json."0.61.1" { inherit profileName; }).out; aws_smithy_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.4" { inherit profileName; }).out; aws_smithy_runtime_api = @@ -1185,15 +1185,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".aws-sdk-ssooidc."1.50.0" = + "registry+https://github.com/rust-lang/crates.io-index".aws-sdk-ssooidc."1.51.0" = overridableMkRustCrate (profileName: rec { name = "aws-sdk-ssooidc"; - version = "1.50.0"; + version = "1.51.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "81fea2f3a8bb3bd10932ae7ad59cc59f65f270fc9183a7e91f501dc5efbef7ee"; + sha256 = "abaf490c2e48eed0bb8e2da2fb08405647bd7f253996e0f93b981958ea0f73b0"; }; dependencies = { aws_credential_types = @@ -1201,7 +1201,7 @@ else inherit profileName; }).out; aws_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.4" { inherit profileName; }).out; aws_smithy_async = @@ -1213,11 +1213,11 @@ else inherit profileName; }).out; aws_smithy_json = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-json."0.60.7" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-json."0.61.1" { inherit profileName; }).out; aws_smithy_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.4" { inherit profileName; }).out; aws_smithy_runtime_api = @@ -1255,15 +1255,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".aws-sdk-sts."1.50.0" = + "registry+https://github.com/rust-lang/crates.io-index".aws-sdk-sts."1.51.0" = overridableMkRustCrate (profileName: rec { name = "aws-sdk-sts"; - version = "1.50.0"; + version = "1.51.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "6ada54e5f26ac246dc79727def52f7f8ed38915cb47781e2a72213957dc3a7d5"; + sha256 = "b68fde0d69c8bfdc1060ea7da21df3e39f6014da316783336deff0a9ec28f4bf"; }; dependencies = { aws_credential_types = @@ -1271,7 +1271,7 @@ else inherit profileName; }).out; aws_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-runtime."1.4.4" { inherit profileName; }).out; aws_smithy_async = @@ -1283,7 +1283,7 @@ else inherit profileName; }).out; aws_smithy_json = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-json."0.60.7" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-json."0.61.1" { inherit profileName; }).out; aws_smithy_query = @@ -1291,7 +1291,7 @@ else inherit profileName; }).out; aws_smithy_runtime = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.4" { inherit profileName; }).out; aws_smithy_runtime_api = @@ -1329,15 +1329,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".aws-sigv4."1.2.5" = + "registry+https://github.com/rust-lang/crates.io-index".aws-sigv4."1.2.6" = overridableMkRustCrate (profileName: rec { name = "aws-sigv4"; - version = "1.2.5"; + version = "1.2.6"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "5619742a0d8f253be760bfbb8e8e8368c69e3587e4637af5754e488a611499b1"; + sha256 = "7d3820e0c08d0737872ff3c7c1f21ebbb6693d832312d6152bf18ef50a5471c2"; }; features = builtins.concatLists [ [ "default" ] @@ -1394,7 +1394,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; once_cell = @@ -1459,7 +1459,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; }; @@ -1646,6 +1646,24 @@ else }; }); + "registry+https://github.com/rust-lang/crates.io-index".aws-smithy-json."0.61.1" = + overridableMkRustCrate + (profileName: rec { + name = "aws-smithy-json"; + version = "0.61.1"; + registry = "registry+https://github.com/rust-lang/crates.io-index"; + src = fetchCratesIo { + inherit name version; + sha256 = "ee4e69cc50921eb913c6b662f8d909131bb3e6ad6cb6090d3a39b66fc5c52095"; + }; + dependencies = { + aws_smithy_types = + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-smithy-types."1.2.9" { + inherit profileName; + }).out; + }; + }); + "registry+https://github.com/rust-lang/crates.io-index".aws-smithy-query."0.60.7" = overridableMkRustCrate (profileName: rec { @@ -1668,15 +1686,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.3" = + "registry+https://github.com/rust-lang/crates.io-index".aws-smithy-runtime."1.7.4" = overridableMkRustCrate (profileName: rec { name = "aws-smithy-runtime"; - version = "1.7.3"; + version = "1.7.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "be28bd063fa91fd871d131fc8b68d7cd4c5fa0869bea68daca50dcb1cbd76be2"; + sha256 = "9f20685047ca9d6f17b994a07f629c813f08b5bce65523e47124879e60103d45"; }; features = builtins.concatLists [ [ "client" ] @@ -1754,7 +1772,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tracing = @@ -1800,7 +1818,7 @@ else inherit profileName; }).out; http_1x = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; pin_project_lite = @@ -1808,7 +1826,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tracing = @@ -1861,7 +1879,7 @@ else inherit profileName; }).out; http_1x = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; http_body_0_4 = @@ -1905,7 +1923,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tokio_util = @@ -2013,7 +2031,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; http_body = @@ -2081,7 +2099,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tower = @@ -2103,32 +2121,6 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".axum-client-ip."0.6.1" = - overridableMkRustCrate - (profileName: rec { - name = "axum-client-ip"; - version = "0.6.1"; - registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { - inherit name version; - sha256 = "9eefda7e2b27e1bda4d6fa8a06b50803b8793769045918bc37ad062d48a6efac"; - }; - dependencies = { - axum = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".axum."0.7.9" { - inherit profileName; - }).out; - forwarded_header_value = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".forwarded-header-value."0.1.1" - { inherit profileName; } - ).out; - serde = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.215" { - inherit profileName; - }).out; - }; - }); - "registry+https://github.com/rust-lang/crates.io-index".axum-core."0.4.5" = overridableMkRustCrate (profileName: rec { @@ -2156,7 +2148,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; http_body = @@ -2227,7 +2219,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; http_body = @@ -2256,7 +2248,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tower = @@ -2934,7 +2926,11 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { + inherit profileName; + }).out; + tracing = + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.41" { inherit profileName; }).out; tracing_error = @@ -2959,7 +2955,7 @@ else inherit profileName; }).out; aws_sdk_s3 = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-s3."1.64.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".aws-sdk-s3."1.65.0" { inherit profileName; }).out; blake3 = @@ -2985,7 +2981,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tracing = @@ -3007,7 +3003,7 @@ else }).out; chir_rs_http_api = (rustPackages."unknown".chir-rs-http-api."0.1.0" { inherit profileName; }).out; clap = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap."4.5.21" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap."4.5.22" { inherit profileName; }).out; color_eyre = @@ -3023,7 +3019,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tracing_subscriber = @@ -3073,6 +3069,7 @@ else inherit profileName; }).out; chir_rs_http_api = (rustPackages."unknown".chir-rs-http-api."0.1.0" { inherit profileName; }).out; + chir_rs_misc = (rustPackages."unknown".chir-rs-misc."0.1.0" { inherit profileName; }).out; eyre = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".eyre."0.6.12" { inherit profileName; @@ -3081,6 +3078,10 @@ else (rustPackages."registry+https://github.com/rust-lang/crates.io-index".mime."0.3.17" { inherit profileName; }).out; + rand = + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".rand."0.8.5" { + inherit profileName; + }).out; serde = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".serde."1.0.215" { inherit profileName; @@ -3090,7 +3091,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tracing = @@ -3122,7 +3123,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tokio_rustls = @@ -3154,10 +3155,6 @@ else (rustPackages."registry+https://github.com/rust-lang/crates.io-index".axum."0.7.9" { inherit profileName; }).out; - axum_client_ip = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".axum-client-ip."0.6.1" { - inherit profileName; - }).out; axum_prometheus = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".axum-prometheus."0.7.0" { inherit profileName; @@ -3166,10 +3163,6 @@ else (rustPackages."registry+https://github.com/rust-lang/crates.io-index".b64-ct."0.1.2" { inherit profileName; }).out; - base64 = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".base64."0.22.1" { - inherit profileName; - }).out; bincode = (rustPackages."registry+https://github.com/rust-lang/crates.io-index".bincode."2.0.0-rc.3" { inherit profileName; @@ -3200,7 +3193,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tower_http = @@ -3261,7 +3254,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; mime = @@ -3273,7 +3266,7 @@ else inherit profileName; }).out; thiserror = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."2.0.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."2.0.4" { inherit profileName; }).out; tracing = @@ -3445,15 +3438,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".clap."4.5.21" = + "registry+https://github.com/rust-lang/crates.io-index".clap."4.5.22" = overridableMkRustCrate (profileName: rec { name = "clap"; - version = "4.5.21"; + version = "4.5.22"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f"; + sha256 = "69371e34337c4c984bbe322360c2547210bf632eb2814bbe78a6e87a2935bd2b"; }; features = builtins.concatLists [ [ "color" ] @@ -3467,7 +3460,7 @@ else ]; dependencies = { clap_builder = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap_builder."4.5.21" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".clap_builder."4.5.22" { inherit profileName; }).out; clap_derive = @@ -3477,15 +3470,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".clap_builder."4.5.21" = + "registry+https://github.com/rust-lang/crates.io-index".clap_builder."4.5.22" = overridableMkRustCrate (profileName: rec { name = "clap_builder"; - version = "4.5.21"; + version = "4.5.22"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec"; + sha256 = "6e24c1b4099818523236a8ca881d2b45db98dadfb4625cf6608c12069fcbbde1"; }; features = builtins.concatLists [ [ "color" ] @@ -4832,28 +4825,6 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".forwarded-header-value."0.1.1" = - overridableMkRustCrate - (profileName: rec { - name = "forwarded-header-value"; - version = "0.1.1"; - registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { - inherit name version; - sha256 = "8835f84f38484cc86f110a805655697908257fb9a7af005234060891557198e9"; - }; - dependencies = { - nonempty = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".nonempty."0.7.0" { - inherit profileName; - }).out; - thiserror = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."1.0.69" { - inherit profileName; - }).out; - }; - }); - "registry+https://github.com/rust-lang/crates.io-index".fs_extra."1.3.0" = overridableMkRustCrate (profileName: rec { @@ -5372,7 +5343,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tokio_util = @@ -5418,7 +5389,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; indexmap = @@ -5430,7 +5401,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tokio_util = @@ -5695,15 +5666,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" = + "registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" = overridableMkRustCrate (profileName: rec { name = "http"; - version = "1.1.0"; + version = "1.2.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258"; + sha256 = "f16ca2af56261c99fba8bac40a10251ce8188205a4c448fbb745a2e4daa76fea"; }; features = builtins.concatLists [ [ "default" ] @@ -5767,7 +5738,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; }; @@ -5793,7 +5764,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; http_body = @@ -5906,7 +5877,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tower_service = @@ -5959,7 +5930,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; http_body = @@ -5987,7 +5958,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; want = @@ -6045,7 +6016,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tokio_rustls = @@ -6078,7 +6049,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; hyper = @@ -6098,7 +6069,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tokio_rustls = @@ -6151,7 +6122,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; http_body = @@ -6171,7 +6142,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tower_service = @@ -7218,7 +7189,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tracing = @@ -7395,18 +7366,6 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".nonempty."0.7.0" = - overridableMkRustCrate - (profileName: rec { - name = "nonempty"; - version = "0.7.0"; - registry = "registry+https://github.com/rust-lang/crates.io-index"; - src = fetchCratesIo { - inherit name version; - sha256 = "e9e591e719385e6ebaeb5ce5d3887f7d5676fceca6411d1925ccc95745f3d6f7"; - }; - }); - "registry+https://github.com/rust-lang/crates.io-index".nu-ansi-term."0.46.0" = overridableMkRustCrate (profileName: rec { @@ -8357,11 +8316,11 @@ else inherit profileName; }).out; thiserror = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."2.0.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."2.0.4" { inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tracing = @@ -8419,7 +8378,7 @@ else inherit profileName; }).out; thiserror = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."2.0.3" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror."2.0.4" { inherit profileName; }).out; tinyvec = @@ -8875,7 +8834,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; ${if !(hostPlatform.parsed.cpu.name == "wasm32") then "http_body" else null} = @@ -8959,7 +8918,7 @@ else inherit profileName; }).out; ${if !(hostPlatform.parsed.cpu.name == "wasm32") then "tokio" else null} = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; ${if !(hostPlatform.parsed.cpu.name == "wasm32") then "tokio_rustls" else null} = @@ -10054,11 +10013,11 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; ureq = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ureq."2.10.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".ureq."2.12.1" { inherit profileName; }).out; webpki_roots = @@ -10281,7 +10240,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; pin_project = @@ -11114,7 +11073,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tokio_stream = @@ -11262,7 +11221,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; url = @@ -11950,15 +11909,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".thiserror."2.0.3" = + "registry+https://github.com/rust-lang/crates.io-index".thiserror."2.0.4" = overridableMkRustCrate (profileName: rec { name = "thiserror"; - version = "2.0.3"; + version = "2.0.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa"; + sha256 = "2f49a1853cf82743e3b7950f77e0f4d622ca36cf4317cba00c767838bac8d490"; }; features = builtins.concatLists [ [ "default" ] @@ -11966,7 +11925,7 @@ else ]; dependencies = { thiserror_impl = - (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror-impl."2.0.3" { + (buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".thiserror-impl."2.0.4" { profileName = "__noProfile"; }).out; }; @@ -11998,15 +11957,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".thiserror-impl."2.0.3" = + "registry+https://github.com/rust-lang/crates.io-index".thiserror-impl."2.0.4" = overridableMkRustCrate (profileName: rec { name = "thiserror-impl"; - version = "2.0.3"; + version = "2.0.4"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568"; + sha256 = "8381894bb3efe0c4acac3ded651301ceee58a15d47c2e34885ed1908ad667061"; }; dependencies = { proc_macro2 = @@ -12194,15 +12153,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" = + "registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" = overridableMkRustCrate (profileName: rec { name = "tokio"; - version = "1.41.1"; + version = "1.42.0"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33"; + sha256 = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551"; }; features = builtins.concatLists [ [ "bytes" ] @@ -12217,6 +12176,7 @@ else [ "process" ] [ "rt" ] [ "rt-multi-thread" ] + [ "signal" ] [ "signal-hook-registry" ] [ "socket2" ] [ "sync" ] @@ -12310,7 +12270,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; }; @@ -12343,7 +12303,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; }; @@ -12374,7 +12334,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; }; @@ -12413,7 +12373,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; }; @@ -12585,7 +12545,7 @@ else inherit profileName; }).out; tokio = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.41.1" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".tokio."1.42.0" { inherit profileName; }).out; tower_layer = @@ -12626,7 +12586,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; http_body = @@ -12677,7 +12637,7 @@ else inherit profileName; }).out; http = - (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.1.0" { + (rustPackages."registry+https://github.com/rust-lang/crates.io-index".http."1.2.0" { inherit profileName; }).out; http_body = @@ -13158,15 +13118,15 @@ else }; }); - "registry+https://github.com/rust-lang/crates.io-index".ureq."2.10.1" = + "registry+https://github.com/rust-lang/crates.io-index".ureq."2.12.1" = overridableMkRustCrate (profileName: rec { name = "ureq"; - version = "2.10.1"; + version = "2.12.1"; registry = "registry+https://github.com/rust-lang/crates.io-index"; src = fetchCratesIo { inherit name version; - sha256 = "b74fc6b57825be3373f7054754755f03ac3a8f5d70015ccad699ba2029956f4a"; + sha256 = "02d1a66277ed75f640d608235660df48c8e3c19f3b4edb6a263315626cc3c01d"; }; features = builtins.concatLists [ [ "tls" ] @@ -14060,6 +14020,7 @@ else [ "Win32_Storage_FileSystem" ] [ "Win32_System" ] [ "Win32_System_Com" ] + [ "Win32_System_Console" ] [ "Win32_System_IO" ] [ "Win32_System_LibraryLoader" ] [ "Win32_System_Pipes" ] diff --git a/Cargo.toml b/Cargo.toml index 461d852..40e36ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,7 +35,8 @@ sentry = { version = "0.34.0", default-features = false, features = [ ] } sentry-eyre = "0.2.0" sentry-tracing = { version = "0.34.0", features = ["backtrace"] } -tokio = { version = "1.41.1", features = ["macros", "rt-multi-thread"] } +tokio = { version = "1.41.1", features = ["macros", "rt-multi-thread", "signal"] } +tracing = "0.1.41" tracing-error = "0.2.0" tracing-subscriber = { version = "0.3.18", features = ["env-filter", "json"] } diff --git a/chir-rs-client/src/main.rs b/chir-rs-client/src/main.rs index af8e252..ead0d7b 100644 --- a/chir-rs-client/src/main.rs +++ b/chir-rs-client/src/main.rs @@ -49,7 +49,7 @@ async fn login(url: String, username: String, password: String) -> Result<()> { if status.is_success() { let response: PasetoToken = bincode::decode_from_slice(&response, bincode::config::standard())?.0; - println!("{}", response.to_paseto()?); + println!("{}", response.to_paseto()); } else { let response: APIError = bincode::decode_from_slice(&response, bincode::config::standard())?.0; diff --git a/chir-rs-db/.sqlx/query-20689c3363e0c27e4664c608378b9731f98e1e9d8d9122cc8c7e63773fcb5bf2.json b/chir-rs-db/.sqlx/query-20689c3363e0c27e4664c608378b9731f98e1e9d8d9122cc8c7e63773fcb5bf2.json new file mode 100644 index 0000000..e03749c --- /dev/null +++ b/chir-rs-db/.sqlx/query-20689c3363e0c27e4664c608378b9731f98e1e9d8d9122cc8c7e63773fcb5bf2.json @@ -0,0 +1,14 @@ +{ + "db_name": "PostgreSQL", + "query": "DELETE FROM \"session_scopes\" WHERE session_id < $1", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bytea" + ] + }, + "nullable": [] + }, + "hash": "20689c3363e0c27e4664c608378b9731f98e1e9d8d9122cc8c7e63773fcb5bf2" +} diff --git a/chir-rs-db/.sqlx/query-59ecfc0f3f0a721ba2fb8b4a953313e0b0701ae34c1e609f3f92a4009d6ee4b3.json b/chir-rs-db/.sqlx/query-59ecfc0f3f0a721ba2fb8b4a953313e0b0701ae34c1e609f3f92a4009d6ee4b3.json new file mode 100644 index 0000000..095f4f6 --- /dev/null +++ b/chir-rs-db/.sqlx/query-59ecfc0f3f0a721ba2fb8b4a953313e0b0701ae34c1e609f3f92a4009d6ee4b3.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO sessions (id, user_id) VALUES ($1, $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bytea", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "59ecfc0f3f0a721ba2fb8b4a953313e0b0701ae34c1e609f3f92a4009d6ee4b3" +} diff --git a/chir-rs-db/.sqlx/query-c086da344a6da521e817bcecf4318e3b338e0b2652d5869a9901390c41f58b65.json b/chir-rs-db/.sqlx/query-c086da344a6da521e817bcecf4318e3b338e0b2652d5869a9901390c41f58b65.json new file mode 100644 index 0000000..e040c68 --- /dev/null +++ b/chir-rs-db/.sqlx/query-c086da344a6da521e817bcecf4318e3b338e0b2652d5869a9901390c41f58b65.json @@ -0,0 +1,15 @@ +{ + "db_name": "PostgreSQL", + "query": "INSERT INTO session_scopes (session_id, scope) VALUES ($1, $2)", + "describe": { + "columns": [], + "parameters": { + "Left": [ + "Bytea", + "Int8" + ] + }, + "nullable": [] + }, + "hash": "c086da344a6da521e817bcecf4318e3b338e0b2652d5869a9901390c41f58b65" +} diff --git a/chir-rs-db/Cargo.toml b/chir-rs-db/Cargo.toml index 15da796..406e7f8 100644 --- a/chir-rs-db/Cargo.toml +++ b/chir-rs-db/Cargo.toml @@ -10,9 +10,11 @@ sqlx = { version = "0.8.2", features = ["runtime-tokio", "derive", "macros", "mi eyre = "0.6.12" tracing = "0.1.40" blake3 = { version = "1.5.4", features = ["serde"] } -tokio = { version = "1.41.1", features = ["fs", "macros", "rt", "sync"] } +tokio = { version = "1.41.1", features = ["fs", "macros", "rt", "sync", "time"] } mime = "0.3.17" chir-rs-http-api = { version = "0.1.0", path = "../chir-rs-http-api" } +chir-rs-misc = { version = "0.1.0", path = "../chir-rs-misc", features = ["id-generator"] } +rand = "0.8.5" [lints.rust] deprecated-safe = "forbid" diff --git a/chir-rs-db/migrations/20241204073434_roll-custom-session-ids.sql b/chir-rs-db/migrations/20241204073434_roll-custom-session-ids.sql new file mode 100644 index 0000000..277c42f --- /dev/null +++ b/chir-rs-db/migrations/20241204073434_roll-custom-session-ids.sql @@ -0,0 +1,26 @@ +-- Add migration script here +drop index sessions_user; +drop index session_scopes_session; +drop index session_scopes_session_scope; +drop table "session_scopes"; +drop table "sessions"; + +CREATE TABLE "sessions" ( + id BYTEA NOT NULL, + user_id BIGINT NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (user_id) REFERENCES "user" (id) ON DELETE CASCADE +); + +CREATE INDEX sessions_user ON "sessions" (user_id); + +CREATE TABLE session_scopes ( + id BIGINT GENERATED ALWAYS AS IDENTITY, + session_id BYTEA NOT NULL, + scope BIGINT NOT NULL, + PRIMARY KEY (id), + FOREIGN KEY (session_id) REFERENCES "sessions" (id) ON DELETE CASCADE +); + +CREATE INDEX session_scopes_session ON "session_scopes" (session_id); +CREATE UNIQUE INDEX session_scopes_session_scope ON "session_scopes" (session_id, scope); \ No newline at end of file diff --git a/chir-rs-db/src/lib.rs b/chir-rs-db/src/lib.rs index 8720acc..b2c391a 100644 --- a/chir-rs-db/src/lib.rs +++ b/chir-rs-db/src/lib.rs @@ -7,6 +7,7 @@ use sqlx::{migrate, query, PgPool}; use tracing::instrument; pub mod file; +pub mod session; pub mod user; /// Opaque database handle diff --git a/chir-rs-db/src/session.rs b/chir-rs-db/src/session.rs new file mode 100644 index 0000000..6bb66d9 --- /dev/null +++ b/chir-rs-db/src/session.rs @@ -0,0 +1,46 @@ +//! Session-related functionality + +use std::time::Duration; + +use crate::Database; +use chir_rs_misc::id_generator; +use eyre::Result; +use rand::{thread_rng, Rng as _}; +use sqlx::query; +use tracing::{error, info, instrument}; + +/// Expires outdated sessions +/// +/// # Errors +/// +/// This function returns an error if accessing the database failed. +#[instrument] +pub async fn expire(db: &Database) -> Result<()> { + let id = id_generator::generate(); + let oldest_acceptable_id = id - ((24 * 60 * 60) << 48); + let oldest_acceptable_id = oldest_acceptable_id.to_be_bytes(); + query!( + r#"DELETE FROM "session_scopes" WHERE session_id < $1"#, + &oldest_acceptable_id + ) + .execute(&*db.0) + .await?; + Ok(()) +} + +/// Automatically expires outdated sessions +/// +/// This is intended to be called on a dedicated job. +#[instrument] +pub async fn expire_sessions_job(db: Database) { + info!("Starting expire sessions job thread"); + loop { + info!("Reaping expired sessions"); + if let Err(e) = expire(&db).await { + error!("Failed to reap expired sessions: {e:?}"); + } + let secs_to_sleep = thread_rng().gen_range(1800..=5400); + info!("Done. Sleeping for {secs_to_sleep}s"); + tokio::time::sleep(Duration::from_secs(secs_to_sleep)).await; + } +} diff --git a/chir-rs-db/src/user.rs b/chir-rs-db/src/user.rs index 7bede3c..4ab8765 100644 --- a/chir-rs-db/src/user.rs +++ b/chir-rs-db/src/user.rs @@ -4,6 +4,7 @@ use std::{collections::HashSet, fmt::Debug}; use bincode::{Decode, Encode}; use chir_rs_http_api::auth::Scope; +use chir_rs_misc::id_generator; use eyre::{Context, Result}; use serde::{Deserialize, Serialize}; use sqlx::{prelude::FromRow, query}; @@ -54,21 +55,24 @@ impl User { /// An error occurs if accessing the database fails #[instrument(skip(db))] #[allow(clippy::panic, reason = "sqlx moment")] - pub async fn new_session(&self, db: &Database, scopes: HashSet) -> Result { + pub async fn new_session(&self, db: &Database, scopes: HashSet) -> Result { let mut txn = db.0.begin().await?; let user_id: i64 = self.id.try_into()?; + let session_id_num = id_generator::generate(); + let session_id = session_id_num.to_be_bytes(); - let session = query!( - "INSERT INTO sessions (user_id) VALUES ($1) RETURNING (id)", + query!( + "INSERT INTO sessions (id, user_id) VALUES ($1, $2)", + &session_id, user_id ) - .fetch_one(&mut *txn) + .execute(&mut *txn) .await?; for scope in scopes { query!( "INSERT INTO session_scopes (session_id, scope) VALUES ($1, $2)", - session.id, + &session_id, scope.to_i64() ) .execute(&mut *txn) @@ -77,6 +81,6 @@ impl User { txn.commit().await?; - Ok(session.id) + Ok(session_id_num) } } diff --git a/chir-rs-http-api/src/auth/mod.rs b/chir-rs-http-api/src/auth/mod.rs index cd745ef..2251a9d 100644 --- a/chir-rs-http-api/src/auth/mod.rs +++ b/chir-rs-http-api/src/auth/mod.rs @@ -67,9 +67,10 @@ impl PasetoToken { } /// Converts a compressed `PasetoToken` to string - pub fn to_paseto(&self) -> Result { + #[must_use] + pub fn to_paseto(&self) -> String { let res = self.token.to_base64(URL_SAFE); - Ok(format!("v4.local.{res}")) + format!("v4.local.{res}") } } diff --git a/chir-rs-http/Cargo.toml b/chir-rs-http/Cargo.toml index caf2d04..5fc9fa2 100644 --- a/chir-rs-http/Cargo.toml +++ b/chir-rs-http/Cargo.toml @@ -6,10 +6,8 @@ edition = "2021" [dependencies] argon2 = "0.5.3" axum = { version = "0.7.9", features = ["tracing"] } -axum-client-ip = "0.6.1" axum-prometheus = "0.7.0" b64-ct = "0.1.2" -base64 = "0.22.1" bincode = "2.0.0-rc.3" chir-rs-castore = { version = "0.1.0", path = "../chir-rs-castore" } chir-rs-config = { version = "0.1.0", path = "../chir-rs-config" } @@ -23,7 +21,10 @@ chir-rs-misc = { version = "0.1.0", path = "../chir-rs-misc", features = [ chrono = "0.4.38" eyre = "0.6.12" mime = "0.3.17" -rusty_paseto = { version = "0.7.1", default-features = false, features = ["batteries_included", "v4_local"] } +rusty_paseto = { version = "0.7.1", default-features = false, features = [ + "batteries_included", + "v4_local", +] } sentry-tower = { version = "0.34.0", features = ["axum", "axum-matched-path"] } tokio = { version = "1.41.1", features = ["fs", "net"] } tower-http = { version = "0.6.2", features = ["trace"] } diff --git a/src/main.rs b/src/main.rs index f1fca1a..4e0add1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,8 @@ use chir_rs_config::ChirRs; use eyre::{Context, Result}; // implicitly used use sentry_eyre as _; -use tokio::try_join; +use tokio::signal; +use tracing::error; use tracing_error::ErrorLayer; use tracing_subscriber::{ fmt::format::JsonFields, layer::SubscriberExt as _, util::SubscriberInitExt as _, Layer, @@ -24,7 +25,7 @@ fn main() -> Result<()> { let _guard = sentry::init(sentry::ClientOptions { dsn: cfg.logging.sentry_dsn.clone(), release: sentry::release_name!(), - traces_sample_rate: 1.0, + traces_sample_rate: 0.1, attach_stacktrace: true, debug: cfg!(debug_assertions), ..Default::default() @@ -93,11 +94,38 @@ fn main() -> Result<()> { let cfg = Arc::new(cfg); let db = chir_rs_db::open_database(&cfg.database.path).await?; let castore = chir_rs_castore::CaStore::new(&cfg).await?; - try_join!( - chir_rs_http::main(Arc::clone(&cfg), db.clone(), castore.clone()), - chir_rs_gemini::main(Arc::clone(&cfg), db.clone(), castore.clone()) - ) - .context("Starting server components")?; + let cfg1 = Arc::clone(&cfg); + let cfg2 = Arc::clone(&cfg); + let db1 = db.clone(); + let db2 = db.clone(); + let castore1 = castore.clone(); + let castore2 = castore.clone(); + let jobs = [ + tokio::spawn(chir_rs_db::session::expire_sessions_job(db.clone())), + tokio::spawn(async move { + if let Err(e) = chir_rs_http::main(cfg1, db1, castore1).await { + error!("Failing to start HTTP Server: {e:?}"); + } + }), + tokio::spawn(async move { + if let Err(e) = chir_rs_gemini::main(cfg2, db2, castore2).await { + error!("Failing to start Gemini Server: {e:?}"); + } + }), + ]; + + signal::ctrl_c() + .await + .context("Trying to register ctrl+c handler")?; + + for job in jobs { + job.abort(); + if let Err(e) = job.await { + if e.is_panic() { + error!("Failed running job: {e:?}"); + } + } + } Ok::<_, eyre::Report>(()) }) .context("Running chir.rs")