From 1cb8d1dbc84701e317e16d39938837484475f9f2 Mon Sep 17 00:00:00 2001 From: Dylan Knutson Date: Sat, 30 Nov 2024 12:41:45 -0800 Subject: [PATCH] Initialize loco app --- .cargo/config.toml | 6 + .devcontainer/.env | 4 + .devcontainer/devcontainer.json | 5 +- .devcontainer/docker-compose.yml | 8 +- .env | 2 +- .github/workflows/ci.yaml | 107 + .gitignore | 19 + Cargo.lock | 5677 +++++++++++++++++ Cargo.toml | 51 + README.md | 58 + assets/i18n/de-DE/main.ftl | 4 + assets/i18n/en-US/main.ftl | 10 + assets/i18n/shared.ftl | 1 + assets/static/404.html | 3 + assets/static/image.png | Bin 0 -> 304720 bytes assets/views/home/hello.html | 12 + config/development.yaml | 95 + config/test.yaml | 95 + examples/playground.rs | 21 + frontend/.gitignore | 31 + frontend/README.md | 42 + frontend/biome.json | 24 + frontend/package.json | 24 + frontend/rsbuild.config.ts | 20 + frontend/src/LocoSplash.tsx | 105 + frontend/src/assets/favicon.ico | Bin 0 -> 15406 bytes frontend/src/env.d.ts | 1 + frontend/src/index.css | 100 + frontend/src/index.tsx | 17 + frontend/tsconfig.json | 15 + migration/Cargo.toml | 23 + migration/src/lib.rs | 17 + migration/src/m20220101_000001_users.rs | 50 + src/app.rs | 68 + src/bin/main.rs | 8 + src/controllers/auth.rs | 157 + src/controllers/mod.rs | 1 + src/fixtures/users.yaml | 17 + src/initializers/mod.rs | 1 + src/initializers/view_engine.rs | 46 + src/lib.rs | 8 + src/mailers/auth.rs | 65 + src/mailers/auth/forgot/html.t | 11 + src/mailers/auth/forgot/subject.t | 1 + src/mailers/auth/forgot/text.t | 3 + src/mailers/auth/welcome/html.t | 13 + src/mailers/auth/welcome/subject.t | 1 + src/mailers/auth/welcome/text.t | 4 + src/mailers/mod.rs | 1 + src/models/_entities/mod.rs | 5 + src/models/_entities/prelude.rs | 3 + src/models/_entities/users.rs | 28 + src/models/mod.rs | 2 + src/models/users.rs | 298 + src/tasks/mod.rs | 1 + src/tasks/seed.rs | 45 + src/views/auth.rs | 41 + src/views/mod.rs | 1 + src/workers/downloader.rs | 23 + src/workers/mod.rs | 1 + tests/mod.rs | 4 + tests/models/mod.rs | 1 + .../can_create_with_password@users.snap | 21 + .../snapshots/can_find_by_email@users-2.snap | 7 + .../snapshots/can_find_by_email@users.snap | 21 + .../snapshots/can_find_by_pid@users-2.snap | 7 + .../snapshots/can_find_by_pid@users.snap | 21 + .../snapshots/can_validate_model@users.snap | 9 + ...te_with_password_with_duplicate@users.snap | 7 + tests/models/users.rs | 223 + tests/requests/auth.rs | 218 + tests/requests/mod.rs | 2 + tests/requests/prepare_data.rs | 57 + .../can_get_current_user@auth_request.snap | 8 + ...can_login_without_verify@auth_request.snap | 8 + .../can_register@auth_request-2.snap | 8 + .../snapshots/can_register@auth_request.snap | 25 + .../can_reset_password@auth_request-2.snap | 8 + .../can_reset_password@auth_request.snap | 8 + ...in_with_invalid_password@auth_request.snap | 8 + ...ogin_with_valid_password@auth_request.snap | 8 + tests/tasks/mod.rs | 1 + tests/tasks/seed.rs | 17 + tests/workers/mod.rs | 1 + 84 files changed, 8191 insertions(+), 7 deletions(-) create mode 100644 .github/workflows/ci.yaml create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 README.md create mode 100644 assets/i18n/de-DE/main.ftl create mode 100644 assets/i18n/en-US/main.ftl create mode 100644 assets/i18n/shared.ftl create mode 100644 assets/static/404.html create mode 100644 assets/static/image.png create mode 100644 assets/views/home/hello.html create mode 100644 config/development.yaml create mode 100644 config/test.yaml create mode 100644 examples/playground.rs create mode 100644 frontend/.gitignore create mode 100644 frontend/README.md create mode 100644 frontend/biome.json create mode 100644 frontend/package.json create mode 100644 frontend/rsbuild.config.ts create mode 100644 frontend/src/LocoSplash.tsx create mode 100644 frontend/src/assets/favicon.ico create mode 100644 frontend/src/env.d.ts create mode 100644 frontend/src/index.css create mode 100644 frontend/src/index.tsx create mode 100644 frontend/tsconfig.json create mode 100644 migration/Cargo.toml create mode 100644 migration/src/lib.rs create mode 100644 migration/src/m20220101_000001_users.rs create mode 100644 src/app.rs create mode 100644 src/bin/main.rs create mode 100644 src/controllers/auth.rs create mode 100644 src/controllers/mod.rs create mode 100644 src/fixtures/users.yaml create mode 100644 src/initializers/mod.rs create mode 100644 src/initializers/view_engine.rs create mode 100644 src/lib.rs create mode 100644 src/mailers/auth.rs create mode 100644 src/mailers/auth/forgot/html.t create mode 100644 src/mailers/auth/forgot/subject.t create mode 100644 src/mailers/auth/forgot/text.t create mode 100644 src/mailers/auth/welcome/html.t create mode 100644 src/mailers/auth/welcome/subject.t create mode 100644 src/mailers/auth/welcome/text.t create mode 100644 src/mailers/mod.rs create mode 100644 src/models/_entities/mod.rs create mode 100644 src/models/_entities/prelude.rs create mode 100644 src/models/_entities/users.rs create mode 100644 src/models/mod.rs create mode 100644 src/models/users.rs create mode 100644 src/tasks/mod.rs create mode 100644 src/tasks/seed.rs create mode 100644 src/views/auth.rs create mode 100644 src/views/mod.rs create mode 100644 src/workers/downloader.rs create mode 100644 src/workers/mod.rs create mode 100644 tests/mod.rs create mode 100644 tests/models/mod.rs create mode 100644 tests/models/snapshots/can_create_with_password@users.snap create mode 100644 tests/models/snapshots/can_find_by_email@users-2.snap create mode 100644 tests/models/snapshots/can_find_by_email@users.snap create mode 100644 tests/models/snapshots/can_find_by_pid@users-2.snap create mode 100644 tests/models/snapshots/can_find_by_pid@users.snap create mode 100644 tests/models/snapshots/can_validate_model@users.snap create mode 100644 tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap create mode 100644 tests/models/users.rs create mode 100644 tests/requests/auth.rs create mode 100644 tests/requests/mod.rs create mode 100644 tests/requests/prepare_data.rs create mode 100644 tests/requests/snapshots/can_get_current_user@auth_request.snap create mode 100644 tests/requests/snapshots/can_login_without_verify@auth_request.snap create mode 100644 tests/requests/snapshots/can_register@auth_request-2.snap create mode 100644 tests/requests/snapshots/can_register@auth_request.snap create mode 100644 tests/requests/snapshots/can_reset_password@auth_request-2.snap create mode 100644 tests/requests/snapshots/can_reset_password@auth_request.snap create mode 100644 tests/requests/snapshots/login_with_invalid_password@auth_request.snap create mode 100644 tests/requests/snapshots/login_with_valid_password@auth_request.snap create mode 100644 tests/tasks/mod.rs create mode 100644 tests/tasks/seed.rs create mode 100644 tests/workers/mod.rs diff --git a/.cargo/config.toml b/.cargo/config.toml index f4d28a3..2f9847f 100644 --- a/.cargo/config.toml +++ b/.cargo/config.toml @@ -1,2 +1,8 @@ [build] rustflags = ["-C", "link-arg=-fuse-ld=lld"] + +[alias] +loco = "run --" +loco-tool = "run --" + +playground = "run --example playground" diff --git a/.devcontainer/.env b/.devcontainer/.env index ba4ba10..cee6537 100644 --- a/.devcontainer/.env +++ b/.devcontainer/.env @@ -10,3 +10,7 @@ DATABASE_URL=postgres://${POSTGRES_USER}:${POSTGRES_PASSWORD}@${POSTGRES_HOSTNAM PGADMIN_DEFAULT_EMAIL=admin@example.com PGADMIN_DEFAULT_PASSWORD=password +PGADMIN_LISTEN_PORT=8080 +# no password required +PGADMIN_CONFIG_SERVER_MODE=False +PGADMIN_CONFIG_MASTER_PASSWORD_REQUIRED=False diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 614e6da..f5af331 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -14,10 +14,11 @@ // "features": {}, // Use 'forwardPorts' to make a list of ports inside the container available locally. "forwardPorts": [ - 80 + 8080, // pgadmin + 5150 // loco app ], // Use 'postCreateCommand' to run commands after the container is created. - "postCreateCommand": "cargo install diesel_cli", + "postCreateCommand": "cargo install loco && cargo install sea-orm-cli", // Configure tool-specific properties. "customizations": { "vscode": { diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml index acf55fd..3ca9033 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/docker-compose.yml @@ -1,8 +1,8 @@ version: '3.8' volumes: - devcontainer-scraper-rs-postgres-data: - devcontainer-scraper-rs-cargo-cache: + devcontainer-thoth-postgres-data: + devcontainer-thoth-cargo-cache: services: app: @@ -15,7 +15,7 @@ services: volumes: - ../..:/workspaces:cached - - devcontainer-scraper-rs-cargo-cache:/usr/local/cargo + - devcontainer-thoth-cargo-cache:/usr/local/cargo # Overrides default command so things don't shut down after the process ends. command: sleep infinity @@ -30,7 +30,7 @@ services: image: pgvector/pgvector:pg17 restart: unless-stopped volumes: - - devcontainer-scraper-rs-postgres-data:/var/lib/postgresql/data + - devcontainer-thoth-postgres-data:/var/lib/postgresql/data env_file: # Ensure that the variables in .env match the same variables in devcontainer.json - .env diff --git a/.env b/.env index c152c23..a7bcd3f 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -RUST_LOG=debug \ No newline at end of file +RUST_LOG=debug diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..9f6cf7e --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,107 @@ +name: CI +on: + push: + branches: + - master + - main + pull_request: + +env: + RUST_TOOLCHAIN: stable + TOOLCHAIN_PROFILE: minimal + +jobs: + rustfmt: + name: Check Style + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ env.RUST_TOOLCHAIN }} + components: rustfmt + - name: Run cargo fmt + uses: actions-rs/cargo@v1 + with: + command: fmt + args: --all -- --check + + clippy: + name: Run Clippy + runs-on: ubuntu-latest + + permissions: + contents: read + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + - name: Install lld + run: sudo apt-get update && sudo apt-get install -qqy lld + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ env.RUST_TOOLCHAIN }} + components: clippy + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + - name: Run cargo clippy + uses: actions-rs/cargo@v1 + with: + command: clippy + args: --all-features -- -D warnings -W clippy::pedantic -W clippy::nursery -W rust-2018-idioms + + test: + name: Run Tests + runs-on: ubuntu-latest + + permissions: + contents: read + + services: + redis: + image: redis + options: >- + --health-cmd "redis-cli ping" + --health-interval 10s + --health-timeout 5s + --health-retries 5 + ports: + - "6379:6379" + postgres: + image: postgres + env: + POSTGRES_DB: postgres_test + POSTGRES_USER: postgres + POSTGRES_PASSWORD: postgres + ports: + - "5432:5432" + # Set health checks to wait until postgres has started + options: --health-cmd pg_isready + --health-interval 10s + --health-timeout 5s + --health-retries 5 + + steps: + - name: Checkout the code + uses: actions/checkout@v4 + - name: Install lld + run: sudo apt-get update && sudo apt-get install -qqy lld + - uses: dtolnay/rust-toolchain@stable + with: + toolchain: ${{ env.RUST_TOOLCHAIN }} + - name: Setup Rust cache + uses: Swatinem/rust-cache@v2 + - name: Run cargo test + uses: actions-rs/cargo@v1 + with: + command: test + args: --all-features --all + env: + REDIS_URL: redis://localhost:${{job.services.redis.ports[6379]}} + DATABASE_URL: postgres://postgres:postgres@localhost:5432/postgres_test + diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8f104b5 --- /dev/null +++ b/.gitignore @@ -0,0 +1,19 @@ +**/config/local.yaml +**/config/*.local.yaml +**/config/production.yaml + +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# include cargo lock +!Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb + +*.sqlite diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..44c286f --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,5677 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "addr2line" +version = "0.24.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" +dependencies = [ + "gimli", +] + +[[package]] +name = "adler2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" + +[[package]] +name = "ahash" +version = "0.7.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + +[[package]] +name = "aho-corasick" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" +dependencies = [ + "memchr", +] + +[[package]] +name = "aliasable" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd" + +[[package]] +name = "alloc-no-stdlib" +version = "2.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" + +[[package]] +name = "alloc-stdlib" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" +dependencies = [ + "alloc-no-stdlib", +] + +[[package]] +name = "allocator-api2" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45862d1c77f2228b9e10bc609d5bc203d86ebc9b87ad8d5d5167a6c9abf739d9" + +[[package]] +name = "android-tzdata" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" + +[[package]] +name = "android_system_properties" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" +dependencies = [ + "libc", +] + +[[package]] +name = "anstream" +version = "0.6.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" +dependencies = [ + "anstyle", + "anstyle-parse", + "anstyle-query", + "anstyle-wincon", + "colorchoice", + "is_terminal_polyfill", + "utf8parse", +] + +[[package]] +name = "anstyle" +version = "1.0.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" + +[[package]] +name = "anstyle-parse" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" +dependencies = [ + "utf8parse", +] + +[[package]] +name = "anstyle-query" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "anstyle-wincon" +version = "3.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" +dependencies = [ + "anstyle", + "windows-sys 0.59.0", +] + +[[package]] +name = "anyhow" +version = "1.0.93" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c95c10ba0b00a02636238b814946408b1322d5ac4760326e6fb8ec956d85775" + +[[package]] +name = "arc-swap" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69f7f8c3906b62b754cd5326047894316021dcfe5a194c8ea52bdd94934a3457" + +[[package]] +name = "argon2" +version = "0.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c3610892ee6e0cbce8ae2700349fcf8f98adb0dbfbee85aec3c9179d29cc072" +dependencies = [ + "base64ct", + "blake2", + "cpufeatures", + "password-hash", +] + +[[package]] +name = "arrayvec" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" + +[[package]] +name = "assert-json-diff" +version = "2.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47e4f2b81832e72834d7518d8487a0396a28cc408186a2e8854c0f98011faf12" +dependencies = [ + "serde", + "serde_json", +] + +[[package]] +name = "async-attributes" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3203e79f4dd9bdda415ed03cf14dae5a2bf775c683a00f94e9cd1faf0f596e5" +dependencies = [ + "quote", + "syn 1.0.109", +] + +[[package]] +name = "async-channel" +version = "1.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "81953c529336010edd6d8e358f886d9581267795c61b19475b71314bffa46d35" +dependencies = [ + "concurrent-queue", + "event-listener 2.5.3", + "futures-core", +] + +[[package]] +name = "async-channel" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a" +dependencies = [ + "concurrent-queue", + "event-listener-strategy", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-compression" +version = "0.4.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df895a515f70646414f4b45c0b79082783b80552b373a68283012928df56f522" +dependencies = [ + "brotli", + "flate2", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "zstd", + "zstd-safe", +] + +[[package]] +name = "async-executor" +version = "1.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "30ca9a001c1e8ba5149f91a74362376cc6bc5b919d92d988668657bd570bdcec" +dependencies = [ + "async-task", + "concurrent-queue", + "fastrand", + "futures-lite", + "slab", +] + +[[package]] +name = "async-global-executor" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05b1b633a2115cd122d73b955eadd9916c18c8f510ec9cd1686404c60ad1c29c" +dependencies = [ + "async-channel 2.3.1", + "async-executor", + "async-io", + "async-lock", + "blocking", + "futures-lite", + "once_cell", + "tokio", +] + +[[package]] +name = "async-io" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "43a2b323ccce0a1d90b449fd71f2a06ca7faa7c54c2751f06c9bd851fc061059" +dependencies = [ + "async-lock", + "cfg-if", + "concurrent-queue", + "futures-io", + "futures-lite", + "parking", + "polling", + "rustix", + "slab", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "async-lock" +version = "3.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff6e472cdea888a4bd64f342f09b3f50e1886d32afe8df3d663c01140b811b18" +dependencies = [ + "event-listener 5.3.1", + "event-listener-strategy", + "pin-project-lite", +] + +[[package]] +name = "async-std" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c634475f29802fde2b8f0b505b1bd00dfe4df7d4a000f0b36f7671197d5c3615" +dependencies = [ + "async-attributes", + "async-channel 1.9.0", + "async-global-executor", + "async-io", + "async-lock", + "crossbeam-utils", + "futures-channel", + "futures-core", + "futures-io", + "futures-lite", + "gloo-timers", + "kv-log-macro", + "log", + "memchr", + "once_cell", + "pin-project-lite", + "pin-utils", + "slab", + "wasm-bindgen-futures", +] + +[[package]] +name = "async-stream" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b5a71a6f37880a80d1d7f19efd781e4b5de42c88f0722cc13bcb6cc2cfe8476" +dependencies = [ + "async-stream-impl", + "futures-core", + "pin-project-lite", +] + +[[package]] +name = "async-stream-impl" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7c24de15d275a1ecfd47a380fb4d5ec9bfe0933f309ed5e705b775596a3574d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "async-task" +version = "4.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b75356056920673b02621b35afd0f7dda9306d03c79a30f5c56c44cf256e3de" + +[[package]] +name = "async-trait" +version = "0.1.83" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "atoi" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f28d99ec8bfea296261ca1af174f24225171fea9664ba9003cbebee704810528" +dependencies = [ + "num-traits", +] + +[[package]] +name = "atomic-waker" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1505bd5d3d116872e7271a6d4e16d81d0c8570876c8de68093a09ac269d8aac0" + +[[package]] +name = "auto-future" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c1e7e457ea78e524f48639f551fd79703ac3f2237f5ecccdf4708f8a75ad373" + +[[package]] +name = "autocfg" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" + +[[package]] +name = "axum" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "edca88bc138befd0323b20752846e6587272d3b03b0343c8ea28a6f819e6e71f" +dependencies = [ + "async-trait", + "axum-core", + "axum-macros", + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "hyper", + "hyper-util", + "itoa", + "matchit", + "memchr", + "mime", + "percent-encoding", + "pin-project-lite", + "rustversion", + "serde", + "serde_json", + "serde_path_to_error", + "serde_urlencoded", + "sync_wrapper 1.0.2", + "tokio", + "tower 0.5.1", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-core" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09f2bd6146b97ae3359fa0cc6d6b376d9539582c7b4220f041a33ec24c226199" +dependencies = [ + "async-trait", + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "mime", + "pin-project-lite", + "rustversion", + "sync_wrapper 1.0.2", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "axum-extra" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c794b30c904f0a1c2fb7740f7df7f7972dfaa14ef6f57cb6178dc63e5dca2f04" +dependencies = [ + "axum", + "axum-core", + "bytes", + "cookie", + "fastrand", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "mime", + "multer", + "pin-project-lite", + "serde", + "tower 0.5.1", + "tower-layer", + "tower-service", +] + +[[package]] +name = "axum-macros" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57d123550fa8d071b7255cb0cc04dc302baa6c8c4a79f55701552684d8399bce" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "axum-test" +version = "16.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "017cbca2776229a7100ebee44e065fcf5baccea6fc4cb9e5bea8328d83863a03" +dependencies = [ + "anyhow", + "assert-json-diff", + "auto-future", + "axum", + "bytes", + "bytesize", + "cookie", + "http 1.1.0", + "http-body-util", + "hyper", + "hyper-util", + "mime", + "pretty_assertions", + "reserve-port", + "rust-multipart-rfc7578_2", + "serde", + "serde_json", + "serde_urlencoded", + "smallvec", + "tokio", + "tower 0.5.1", + "url", +] + +[[package]] +name = "backtrace" +version = "0.3.74" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" +dependencies = [ + "addr2line", + "cfg-if", + "libc", + "miniz_oxide", + "object", + "rustc-demangle", + "windows-targets 0.52.6", +] + +[[package]] +name = "backtrace_printer" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d28de81c708c843640982b66573df0f0168d87e42854b563971f326745aab7" +dependencies = [ + "btparse-stable", + "colored", + "regex", + "thiserror", +] + +[[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" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" + +[[package]] +name = "base64ct" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b" + +[[package]] +name = "bb8" +version = "0.8.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89aabfae550a5c44b43ab941844ffcd2e993cb6900b342debf59e9ea74acdb8" +dependencies = [ + "async-trait", + "futures-util", + "parking_lot", + "tokio", +] + +[[package]] +name = "bigdecimal" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f850665a0385e070b64c38d2354e6c104c8479c59868d1e48a0c13ee2c7a1c1" +dependencies = [ + "autocfg", + "libm", + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "bitflags" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" +dependencies = [ + "serde", +] + +[[package]] +name = "bitvec" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c" +dependencies = [ + "funty", + "radium", + "tap", + "wyz", +] + +[[package]] +name = "blake2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46502ad458c9a52b69d4d4d32775c788b7a1b85e8bc9d482d92250fc0e3f8efe" +dependencies = [ + "digest", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "blocking" +version = "1.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "703f41c54fc768e63e091340b424302bb1c29ef4aa0c7f10fe849dfb114d29ea" +dependencies = [ + "async-channel 2.3.1", + "async-task", + "futures-io", + "futures-lite", + "piper", +] + +[[package]] +name = "borsh" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2506947f73ad44e344215ccd6403ac2ae18cd8e046e581a441bf8d199f257f03" +dependencies = [ + "borsh-derive", + "cfg_aliases", +] + +[[package]] +name = "borsh-derive" +version = "1.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2593a3b8b938bd68373196c9832f516be11fa487ef4ae745eb282e6a56a7244" +dependencies = [ + "once_cell", + "proc-macro-crate", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "brotli" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc97b8f16f944bba54f0433f07e30be199b6dc2bd25937444bbad560bcea29bd" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", + "brotli-decompressor", +] + +[[package]] +name = "brotli-decompressor" +version = "4.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" +dependencies = [ + "alloc-no-stdlib", + "alloc-stdlib", +] + +[[package]] +name = "bstr" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1a68f1f47cdf0ec8ee4b941b2eee2a80cb796db73118c0dd09ac63fbe405be22" +dependencies = [ + "memchr", + "serde", +] + +[[package]] +name = "btparse-stable" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d75b8252ed252f881d1dc4482ae3c3854df6ee8183c1906bac50ff358f4f89f" + +[[package]] +name = "bumpalo" +version = "3.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" + +[[package]] +name = "byte-unit" +version = "4.0.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da78b32057b8fdfc352504708feeba7216dcd65a2c9ab02978cbd288d1279b6c" +dependencies = [ + "serde", + "utf8-width", +] + +[[package]] +name = "bytecheck" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2" +dependencies = [ + "bytecheck_derive", + "ptr_meta", + "simdutf8", +] + +[[package]] +name = "bytecheck_derive" +version = "0.6.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "byteorder" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" + +[[package]] +name = "bytes" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da" + +[[package]] +name = "bytesize" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a3e368af43e418a04d52505cf3dbc23dda4e3407ae2fa99fd0e4f308ce546acc" + +[[package]] +name = "cc" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fd9de9f2205d5ef3fd67e685b0df337994ddd4495e2a28d185500d0e1edfea47" +dependencies = [ + "jobserver", + "libc", + "shlex", +] + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cfg_aliases" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" + +[[package]] +name = "chrono" +version = "0.4.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401" +dependencies = [ + "android-tzdata", + "iana-time-zone", + "js-sys", + "num-traits", + "serde", + "wasm-bindgen", + "windows-targets 0.52.6", +] + +[[package]] +name = "chrono-tz" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" +dependencies = [ + "chrono", + "chrono-tz-build", + "phf", +] + +[[package]] +name = "chrono-tz-build" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" +dependencies = [ + "parse-zoneinfo", + "phf", + "phf_codegen", +] + +[[package]] +name = "chumsky" +version = "0.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8eebd66744a15ded14960ab4ccdbfb51ad3b81f51f3f04a80adac98c985396c9" +dependencies = [ + "hashbrown 0.14.5", + "stacker", +] + +[[package]] +name = "clap" +version = "4.5.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fb3b4b9e5a7c7514dfa52869339ee98b3156b0bfb4e8a77c4ff4babb64b1604f" +dependencies = [ + "clap_builder", + "clap_derive", +] + +[[package]] +name = "clap_builder" +version = "4.5.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b17a95aa67cc7b5ebd32aa5370189aa0d79069ef1c64ce893bd30fb24bff20ec" +dependencies = [ + "anstream", + "anstyle", + "clap_lex", + "strsim", +] + +[[package]] +name = "clap_derive" +version = "4.5.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "clap_lex" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "afb84c814227b90d6895e01398aee0d8033c00e7466aca416fb6a8e0eb19d8a7" + +[[package]] +name = "colorchoice" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" + +[[package]] +name = "colored" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8" +dependencies = [ + "lazy_static", + "windows-sys 0.48.0", +] + +[[package]] +name = "combine" +version = "4.6.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba5a308b75df32fe02788e748662718f03fde005016435c444eea572398219fd" +dependencies = [ + "bytes", + "futures-core", + "memchr", + "pin-project-lite", + "tokio", + "tokio-util", +] + +[[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.15.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e1f83fc076bd6dd27517eacdf25fef6c4dfe5f1d7448bafaaf3a26f13b5e4eb" +dependencies = [ + "encode_unicode", + "lazy_static", + "libc", + "unicode-width", + "windows-sys 0.52.0", +] + +[[package]] +name = "const-oid" +version = "0.9.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2459377285ad874054d797f3ccebf984978aa39129f6eafde5cdc8315b612f8" + +[[package]] +name = "convert_case" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec182b0ca2f35d8fc196cf3404988fd8b8c739a4d270ff118a398feb0cbec1ca" +dependencies = [ + "unicode-segmentation", +] + +[[package]] +name = "cookie" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ddef33a339a91ea89fb53151bd0a4689cfce27055c291dfa69945475d22c747" +dependencies = [ + "percent-encoding", + "time", + "version_check", +] + +[[package]] +name = "core-foundation-sys" +version = "0.8.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" + +[[package]] +name = "cpufeatures" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" +dependencies = [ + "libc", +] + +[[package]] +name = "crc" +version = "3.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69e6e4d7b33a94f0991c26729976b10ebde1d34c3ee82408fb536164fa10d636" +dependencies = [ + "crc-catalog", +] + +[[package]] +name = "crc-catalog" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19d374276b40fb8bbdee95aef7c7fa6b5316ec764510eb64b8dd0e2ed0d7e7f5" + +[[package]] +name = "crc32fast" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "cron" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f8c3e73077b4b4a6ab1ea5047c37c57aee77657bc8ecd6f29b0af082d0b0c07" +dependencies = [ + "chrono", + "nom", + "once_cell", +] + +[[package]] +name = "cron_clock" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a8699d8ed16e3db689f8ae04d8dc3c6666a4ba7e724e5a157884b7cc385d16b" +dependencies = [ + "chrono", + "nom", + "once_cell", +] + +[[package]] +name = "crossbeam-channel" +version = "0.5.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33480d6946193aa8033910124896ca395333cae7e2d1113d1fef6c3272217df2" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-deque" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "613f8cc01fe9cf1a3eb3d7f488fd2fa8388403e97039e2f73692932e291a770d" +dependencies = [ + "crossbeam-epoch", + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-epoch" +version = "0.9.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-queue" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0346b5d5e76ac2fe4e327c5fd1118d6be7c51dfb18f9b7922923f287471e35" +dependencies = [ + "crossbeam-utils", +] + +[[package]] +name = "crossbeam-utils" +version = "0.8.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22ec99545bb0ed0ea7bb9b8e1e9122ea386ff8a48c0922e43f36d45ab09e0e80" + +[[package]] +name = "cruet" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "113a9e83d8f614be76de8df1f25bf9d0ea6e85ea573710a3d3f3abe1438ae49c" +dependencies = [ + "once_cell", + "regex", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "darling" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f63b86c8a8826a49b8c21f08a2d07338eec8d900540f8630dc76284be802989" +dependencies = [ + "darling_core", + "darling_macro", +] + +[[package]] +name = "darling_core" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95133861a8032aaea082871032f5815eb9e98cef03fa916ab4500513994df9e5" +dependencies = [ + "fnv", + "ident_case", + "proc-macro2", + "quote", + "strsim", + "syn 2.0.89", +] + +[[package]] +name = "darling_macro" +version = "0.20.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d336a2a514f6ccccaa3e09b02d41d35330c07ddf03a62165fcec10bb561c7806" +dependencies = [ + "darling_core", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "der" +version = "0.7.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f55bf8e7b65898637379c1b74eb1551107c8294ed26d855ceb9fd1a09cfc9bc0" +dependencies = [ + "const-oid", + "pem-rfc7468", + "zeroize", +] + +[[package]] +name = "deranged" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" +dependencies = [ + "powerfmt", + "serde", +] + +[[package]] +name = "deunicode" +version = "1.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" + +[[package]] +name = "dialoguer" +version = "0.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "658bce805d770f407bc62102fca7c2c64ceef2fbcb2b8bd19d2765ce093980de" +dependencies = [ + "console", + "shell-words", + "tempfile", + "thiserror", + "zeroize", +] + +[[package]] +name = "diff" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56254986775e3233ffa9c4d7d3faaf6d36a2c09d30b20687e9f88bc8bafc16c8" + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "const-oid", + "crypto-common", + "subtle", +] + +[[package]] +name = "dirs-next" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1" +dependencies = [ + "cfg-if", + "dirs-sys-next", +] + +[[package]] +name = "dirs-sys-next" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d" +dependencies = [ + "libc", + "redox_users", + "winapi", +] + +[[package]] +name = "displaydoc" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "doc-comment" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" + +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + +[[package]] +name = "duct" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ab5718d1224b63252cd0c6f74f6480f9ffeb117438a2e0f5cf6d9a4798929c" +dependencies = [ + "libc", + "once_cell", + "os_pipe", + "shared_child", +] + +[[package]] +name = "duct_sh" +version = "0.13.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6633cadba557545fbbe0299a2f9adc4bb2fc5fb238773f5e841e0c23d62146" +dependencies = [ + "duct", +] + +[[package]] +name = "either" +version = "1.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0" +dependencies = [ + "serde", +] + +[[package]] +name = "email-encoding" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60d1d33cdaede7e24091f039632eb5d3c7469fe5b066a985281a34fc70fa317f" +dependencies = [ + "base64 0.22.1", + "memchr", +] + +[[package]] +name = "email_address" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449" + +[[package]] +name = "encode_unicode" +version = "0.3.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a357d28ed41a50f9c765dbfe56cbc04a64e53e5fc58ba79fbc34c10ef3df831f" + +[[package]] +name = "encoding_rs" +version = "0.8.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" +dependencies = [ + "cfg-if", +] + +[[package]] +name = "english-to-cron" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c16423ac933fee80f05a52b435a912d5b08edbbbfe936e0042ebb3accdf303da" +dependencies = [ + "lazy_static", + "regex", +] + +[[package]] +name = "equivalent" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" + +[[package]] +name = "errno" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "534c5cf6194dfab3db3242765c03bbe257cf92f22b38f6bc0c58d59108a820ba" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "etcetera" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "136d1b5283a1ab77bd9257427ffd09d8667ced0570b6f938942bc7568ed5b943" +dependencies = [ + "cfg-if", + "home", + "windows-sys 0.48.0", +] + +[[package]] +name = "event-listener" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" + +[[package]] +name = "event-listener" +version = "5.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6032be9bd27023a771701cc49f9f053c751055f71efb2e0ae5c15809093675ba" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] + +[[package]] +name = "event-listener-strategy" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0f214dc438f977e6d4e3500aaa277f5ad94ca83fbbd9b1a15713ce2344ccc5a1" +dependencies = [ + "event-listener 5.3.1", + "pin-project-lite", +] + +[[package]] +name = "fastrand" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" + +[[package]] +name = "flate2" +version = "1.0.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" +dependencies = [ + "crc32fast", + "miniz_oxide", +] + +[[package]] +name = "fluent" +version = "0.16.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb74634707bebd0ce645a981148e8fb8c7bccd4c33c652aeffd28bf2f96d555a" +dependencies = [ + "fluent-bundle", + "unic-langid", +] + +[[package]] +name = "fluent-bundle" +version = "0.15.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7fe0a21ee80050c678013f82edf4b705fe2f26f1f9877593d13198612503f493" +dependencies = [ + "fluent-langneg", + "fluent-syntax", + "intl-memoizer", + "intl_pluralrules", + "rustc-hash", + "self_cell 0.10.3", + "smallvec", + "unic-langid", +] + +[[package]] +name = "fluent-langneg" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2c4ad0989667548f06ccd0e306ed56b61bd4d35458d54df5ec7587c0e8ed5e94" +dependencies = [ + "unic-langid", +] + +[[package]] +name = "fluent-syntax" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2a530c4694a6a8d528794ee9bbd8ba0122e779629ac908d15ad5a7ae7763a33d" +dependencies = [ + "thiserror", +] + +[[package]] +name = "fluent-template-macros" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dec7592cd1f45c1afe9084ce59c62a3a7c266c125c4c2ec97e95b0563c4aa914" +dependencies = [ + "flume 0.10.14", + "ignore", + "once_cell", + "proc-macro2", + "quote", + "syn 1.0.109", + "unic-langid", +] + +[[package]] +name = "fluent-templates" +version = "0.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7c3ef2c2152757885365abce32ddf682746062f1b6b3c0824a29fbed6ee4d080" +dependencies = [ + "arc-swap", + "fluent", + "fluent-bundle", + "fluent-langneg", + "fluent-syntax", + "fluent-template-macros", + "flume 0.10.14", + "heck 0.4.1", + "ignore", + "intl-memoizer", + "lazy_static", + "log", + "once_cell", + "serde_json", + "snafu 0.7.5", + "tera", + "unic-langid", +] + +[[package]] +name = "flume" +version = "0.10.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1657b4441c3403d9f7b3409e47575237dac27b1b5726df654a6ecbf92f0f7577" +dependencies = [ + "spin", +] + +[[package]] +name = "flume" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da0e4dd2a88388a1f4ccc7c9ce104604dab68d9f408dc34cd45823d5a9069095" +dependencies = [ + "futures-core", + "futures-sink", + "spin", +] + +[[package]] +name = "fnv" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" + +[[package]] +name = "form_urlencoded" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" +dependencies = [ + "percent-encoding", +] + +[[package]] +name = "fs-err" +version = "2.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88a41f105fe1d5b6b34b2055e3dc59bb79b46b48b2040b9e6c7b4b5de097aa41" +dependencies = [ + "autocfg", +] + +[[package]] +name = "funty" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c" + +[[package]] +name = "futures" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876" +dependencies = [ + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-channel" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10" +dependencies = [ + "futures-core", + "futures-sink", +] + +[[package]] +name = "futures-core" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" + +[[package]] +name = "futures-executor" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f" +dependencies = [ + "futures-core", + "futures-task", + "futures-util", +] + +[[package]] +name = "futures-intrusive" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d930c203dd0b6ff06e0201a4a2fe9149b43c684fd4420555b26d21b1a02956f" +dependencies = [ + "futures-core", + "lock_api", + "parking_lot", +] + +[[package]] +name = "futures-io" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6" + +[[package]] +name = "futures-lite" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cef40d21ae2c515b51041df9ed313ed21e572df340ea58a922a0aefe7e8891a1" +dependencies = [ + "fastrand", + "futures-core", + "futures-io", + "parking", + "pin-project-lite", +] + +[[package]] +name = "futures-macro" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "futures-sink" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" + +[[package]] +name = "futures-task" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" + +[[package]] +name = "futures-timer" +version = "3.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f288b0a4f20f9a56b5d1da57e2227c661b7b16168e2f72365f57b63326e29b24" + +[[package]] +name = "futures-util" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" +dependencies = [ + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "slab", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "gethostname" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1ebd34e35c46e00bb73e81363248d627782724609fe1b6396f553f68fe3862e" +dependencies = [ + "libc", + "winapi", +] + +[[package]] +name = "getrandom" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" +dependencies = [ + "cfg-if", + "js-sys", + "libc", + "wasi", + "wasm-bindgen", +] + +[[package]] +name = "gimli" +version = "0.31.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" + +[[package]] +name = "glob" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d2fabcfbdc87f4758337ca535fb41a6d701b65693ce38287d856d1674551ec9b" + +[[package]] +name = "globset" +version = "0.4.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" +dependencies = [ + "aho-corasick", + "bstr", + "log", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "globwalk" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" +dependencies = [ + "bitflags", + "ignore", + "walkdir", +] + +[[package]] +name = "gloo-timers" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbb143cf96099802033e0d4f4963b19fd2e0b728bcf076cd9cf7f6634f092994" +dependencies = [ + "futures-channel", + "futures-core", + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash 0.7.8", +] + +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash 0.8.11", + "allocator-api2", +] + +[[package]] +name = "hashbrown" +version = "0.15.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" + +[[package]] +name = "hashlink" +version = "0.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ba4ff7128dee98c7dc9794b6a411377e1404dba1c97deb8d1a55297bd25d8af" +dependencies = [ + "hashbrown 0.14.5", +] + +[[package]] +name = "heck" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" + +[[package]] +name = "heck" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" + +[[package]] +name = "hermit-abi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024" + +[[package]] +name = "hermit-abi" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" + +[[package]] +name = "hex" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70" + +[[package]] +name = "hkdf" +version = "0.12.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b5f8eb2ad728638ea2c7d47a21db23b7b58a72ed6a38256b8a1849f15fbbdf7" +dependencies = [ + "hmac", +] + +[[package]] +name = "hmac" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c49c37c09c17a53d937dfbb742eb3a961d65a994e6bcdcf37e7399d0cc8ab5e" +dependencies = [ + "digest", +] + +[[package]] +name = "home" +version = "0.5.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3d1354bf6b7235cb4a0576c2619fd4ed18183f689b12b006a0ee7329eeff9a5" +dependencies = [ + "windows-sys 0.52.0", +] + +[[package]] +name = "hostname" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f9c7c7c8ac16c798734b8a24560c1362120597c40d5e1459f09498f8f6c8f2ba" +dependencies = [ + "cfg-if", + "libc", + "windows", +] + +[[package]] +name = "http" +version = "0.2.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "21b9ddb458710bc376481b842f5da65cdf31522de232c1ca8146abce2a358258" +dependencies = [ + "bytes", + "fnv", + "itoa", +] + +[[package]] +name = "http-body" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1efedce1fb8e6913f23e0c92de8e62cd5b772a67e7b3946df930a62566c93184" +dependencies = [ + "bytes", + "http 1.1.0", +] + +[[package]] +name = "http-body-util" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793429d76616a256bcb62c2a2ec2bed781c8307e797e2598c50010f2bee2544f" +dependencies = [ + "bytes", + "futures-util", + "http 1.1.0", + "http-body", + "pin-project-lite", +] + +[[package]] +name = "http-range-header" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08a397c49fec283e3d6211adbe480be95aae5f304cfb923e9970e08956d5168a" + +[[package]] +name = "httparse" +version = "1.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" + +[[package]] +name = "httpdate" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" + +[[package]] +name = "humansize" +version = "2.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" +dependencies = [ + "libm", +] + +[[package]] +name = "humantime" +version = "2.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" + +[[package]] +name = "hyper" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "97818827ef4f364230e16705d4706e2897df2bb60617d6ca15d598025a3c481f" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "smallvec", + "tokio", + "want", +] + +[[package]] +name = "hyper-util" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df2dcfbe0677734ab2f3ffa7fa7bfd4706bfdc1ef393f2ee30184aed67e631b4" +dependencies = [ + "bytes", + "futures-channel", + "futures-util", + "http 1.1.0", + "http-body", + "hyper", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", +] + +[[package]] +name = "iana-time-zone" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" +dependencies = [ + "android_system_properties", + "core-foundation-sys", + "iana-time-zone-haiku", + "js-sys", + "wasm-bindgen", + "windows-core", +] + +[[package]] +name = "iana-time-zone-haiku" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" +dependencies = [ + "cc", +] + +[[package]] +name = "icu_collections" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" +dependencies = [ + "displaydoc", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_locid" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" +dependencies = [ + "displaydoc", + "litemap", + "tinystr", + "writeable", + "zerovec", +] + +[[package]] +name = "icu_locid_transform" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_locid_transform_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_locid_transform_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" + +[[package]] +name = "icu_normalizer" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_normalizer_data", + "icu_properties", + "icu_provider", + "smallvec", + "utf16_iter", + "utf8_iter", + "write16", + "zerovec", +] + +[[package]] +name = "icu_normalizer_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" + +[[package]] +name = "icu_properties" +version = "1.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" +dependencies = [ + "displaydoc", + "icu_collections", + "icu_locid_transform", + "icu_properties_data", + "icu_provider", + "tinystr", + "zerovec", +] + +[[package]] +name = "icu_properties_data" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" + +[[package]] +name = "icu_provider" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" +dependencies = [ + "displaydoc", + "icu_locid", + "icu_provider_macros", + "stable_deref_trait", + "tinystr", + "writeable", + "yoke", + "zerofrom", + "zerovec", +] + +[[package]] +name = "icu_provider_macros" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "ident_case" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39" + +[[package]] +name = "idna" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "634d9b1461af396cad843f47fdba5597a4f9e6ddd4bfb6ff5d85028c25cb12f6" +dependencies = [ + "unicode-bidi", + "unicode-normalization", +] + +[[package]] +name = "idna" +version = "1.0.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" +dependencies = [ + "idna_adapter", + "smallvec", + "utf8_iter", +] + +[[package]] +name = "idna_adapter" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" +dependencies = [ + "icu_normalizer", + "icu_properties", +] + +[[package]] +name = "ignore" +version = "0.4.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" +dependencies = [ + "crossbeam-deque", + "globset", + "log", + "memchr", + "regex-automata 0.4.9", + "same-file", + "walkdir", + "winapi-util", +] + +[[package]] +name = "include_dir" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "923d117408f1e49d914f1a379a309cffe4f18c05cf4e3d12e613a15fc81bd0dd" +dependencies = [ + "include_dir_macros", +] + +[[package]] +name = "include_dir_macros" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7cab85a7ed0bd5f0e76d93846e0147172bed2e2d3f859bcc33a8d9699cad1a75" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "indexmap" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da" +dependencies = [ + "equivalent", + "hashbrown 0.15.2", +] + +[[package]] +name = "inherent" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "insta" +version = "1.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e9ffc4d4892617c50a928c52b2961cb5174b6fc6ebf252b2fac9d21955c48b8" +dependencies = [ + "console", + "lazy_static", + "linked-hash-map", + "pest", + "pest_derive", + "regex", + "serde", + "similar", +] + +[[package]] +name = "intl-memoizer" +version = "0.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fe22e020fce238ae18a6d5d8c502ee76a52a6e880d99477657e6acc30ec57bda" +dependencies = [ + "type-map", + "unic-langid", +] + +[[package]] +name = "intl_pluralrules" +version = "7.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "078ea7b7c29a2b4df841a7f6ac8775ff6074020c6776d48491ce2268e068f972" +dependencies = [ + "unic-langid", +] + +[[package]] +name = "ipnetwork" +version = "0.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf466541e9d546596ee94f9f69590f89473455f88372423e0008fc1a7daf100e" +dependencies = [ + "serde", +] + +[[package]] +name = "is-terminal" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" +dependencies = [ + "hermit-abi 0.4.0", + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "is_terminal_polyfill" +version = "1.70.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" + +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + +[[package]] +name = "itertools" +version = "0.13.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "413ee7dfc52ee1a4949ceeb7dbc8a33f2d6c088194d9f922fb8318faf1f01186" +dependencies = [ + "either", +] + +[[package]] +name = "itoa" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" + +[[package]] +name = "jobserver" +version = "0.1.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" +dependencies = [ + "libc", +] + +[[package]] +name = "js-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9" +dependencies = [ + "wasm-bindgen", +] + +[[package]] +name = "jsonwebtoken" +version = "9.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9ae10193d25051e74945f1ea2d0b42e03cc3b890f7e4cc5faa44997d808193f" +dependencies = [ + "base64 0.21.7", + "js-sys", + "pem", + "ring", + "serde", + "serde_json", + "simple_asn1", +] + +[[package]] +name = "kv-log-macro" +version = "1.0.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0de8b303297635ad57c9f5059fd9cee7a47f8e8daa09df0fcd07dd39fb22977f" +dependencies = [ + "log", +] + +[[package]] +name = "lazy_static" +version = "1.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" +dependencies = [ + "spin", +] + +[[package]] +name = "lettre" +version = "0.11.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0161e452348e399deb685ba05e55ee116cae9410f4f51fe42d597361444521d9" +dependencies = [ + "async-trait", + "base64 0.22.1", + "chumsky", + "email-encoding", + "email_address", + "fastrand", + "futures-io", + "futures-util", + "hostname", + "httpdate", + "idna 1.0.3", + "mime", + "nom", + "percent-encoding", + "quoted_printable", + "rustls", + "rustls-pemfile", + "rustls-pki-types", + "socket2", + "tokio", + "tokio-rustls", + "url", + "webpki-roots", +] + +[[package]] +name = "libc" +version = "0.2.166" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36" + +[[package]] +name = "libm" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" + +[[package]] +name = "libredox" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d" +dependencies = [ + "bitflags", + "libc", +] + +[[package]] +name = "libsqlite3-sys" +version = "0.30.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" +dependencies = [ + "cc", + "pkg-config", + "vcpkg", +] + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.4.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" + +[[package]] +name = "litemap" +version = "0.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" + +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + +[[package]] +name = "loco-gen" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b918975ceca60b4fc09180b0431efbe236c7b9cf29393130cac7572ba22c7cc4" +dependencies = [ + "chrono", + "clap", + "dialoguer", + "duct", + "regex", + "rrgen", + "serde", + "serde_json", + "thiserror", + "tracing", +] + +[[package]] +name = "loco-rs" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bda11695a517c1a51e5ac44eb4ea8b76d593c29544ca4523d8885279d0adfa22" +dependencies = [ + "argon2", + "async-trait", + "axum", + "axum-extra", + "axum-test", + "backtrace_printer", + "bb8", + "byte-unit", + "bytes", + "cfg-if", + "chrono", + "clap", + "colored", + "duct", + "duct_sh", + "english-to-cron", + "fs-err", + "futures-util", + "heck 0.4.1", + "hyper", + "include_dir", + "ipnetwork", + "jsonwebtoken", + "lettre", + "loco-gen", + "mime", + "moka", + "object_store", + "rand", + "regex", + "rusty-sidekiq", + "sea-orm", + "sea-orm-migration", + "semver", + "serde", + "serde_json", + "serde_variant", + "serde_yaml", + "sqlx", + "tera", + "thiserror", + "thousands", + "tokio", + "tokio-cron-scheduler", + "tokio-util", + "toml", + "tower 0.4.13", + "tower-http", + "tracing", + "tracing-appender", + "tracing-subscriber", + "ulid", + "uuid", + "validator", +] + +[[package]] +name = "log" +version = "0.4.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" +dependencies = [ + "value-bag", +] + +[[package]] +name = "matchers" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" +dependencies = [ + "regex-automata 0.1.10", +] + +[[package]] +name = "matchit" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e7465ac9959cc2b1404e8e2367b43684a6d13790fe23056cc8c6c5a6b7bcb94" + +[[package]] +name = "md-5" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d89e7ee0cfbedfc4da3340218492196241d89eefb6dab27de5df917a6d2e78cf" +dependencies = [ + "cfg-if", + "digest", +] + +[[package]] +name = "memchr" +version = "2.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" + +[[package]] +name = "migration" +version = "0.1.0" +dependencies = [ + "async-std", + "loco-rs", + "sea-orm-migration", +] + +[[package]] +name = "mime" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" + +[[package]] +name = "mime_guess" +version = "2.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" +dependencies = [ + "mime", + "unicase", +] + +[[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.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" +dependencies = [ + "adler2", +] + +[[package]] +name = "mio" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec" +dependencies = [ + "hermit-abi 0.3.9", + "libc", + "wasi", + "windows-sys 0.52.0", +] + +[[package]] +name = "moka" +version = "0.12.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32cf62eb4dd975d2dde76432fb1075c49e3ee2331cf36f1f8fd4b66550d32b6f" +dependencies = [ + "crossbeam-channel", + "crossbeam-epoch", + "crossbeam-utils", + "once_cell", + "parking_lot", + "quanta", + "rustc_version", + "smallvec", + "tagptr", + "thiserror", + "triomphe", + "uuid", +] + +[[package]] +name = "multer" +version = "3.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83e87776546dc87511aa5ee218730c92b666d7264ab6ed41f9d215af9cd5224b" +dependencies = [ + "bytes", + "encoding_rs", + "futures-util", + "http 1.1.0", + "httparse", + "memchr", + "mime", + "spin", + "version_check", +] + +[[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 = "nu-ansi-term" +version = "0.46.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77a8165726e8236064dbb45459242600304b42a5ea24ee2948e18e023bf7ba84" +dependencies = [ + "overload", + "winapi", +] + +[[package]] +name = "num-bigint" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a5e44f723f1133c9deac646763579fdb3ac745e418f2a7af9cd0c431da1f20b9" +dependencies = [ + "num-integer", + "num-traits", +] + +[[package]] +name = "num-bigint-dig" +version = "0.8.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc84195820f291c7697304f3cbdadd1cb7199c0efc917ff5eafd71225c136151" +dependencies = [ + "byteorder", + "lazy_static", + "libm", + "num-integer", + "num-iter", + "num-traits", + "rand", + "smallvec", + "zeroize", +] + +[[package]] +name = "num-conv" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" + +[[package]] +name = "num-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed3955f1a9c7c0c15e092f9c887db08b1fc683305fdf6eb6684f22555355e202" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "num-integer" +version = "0.1.46" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7969661fd2958a5cb096e56c8e1ad0444ac2bbcd0061bd28660485a44879858f" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1429034a0490724d0075ebb2bc9e875d6503c3cf69e235a8941aa757d83ef5bf" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" +dependencies = [ + "autocfg", + "libm", +] + +[[package]] +name = "num_cpus" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4161fcb6d602d4d2081af7c3a45852d875a03dd337a6bfdd6e06407b61342a43" +dependencies = [ + "hermit-abi 0.3.9", + "libc", +] + +[[package]] +name = "object" +version = "0.36.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" +dependencies = [ + "memchr", +] + +[[package]] +name = "object_store" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eb4c22c6154a1e759d7099f9ffad7cc5ef8245f9efbab4a41b92623079c82f3" +dependencies = [ + "async-trait", + "bytes", + "chrono", + "futures", + "humantime", + "itertools 0.13.0", + "parking_lot", + "percent-encoding", + "snafu 0.8.5", + "tokio", + "tracing", + "url", + "walkdir", +] + +[[package]] +name = "once_cell" +version = "1.20.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" + +[[package]] +name = "ordered-float" +version = "3.9.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" +dependencies = [ + "num-traits", +] + +[[package]] +name = "os_pipe" +version = "1.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ffd2b0a5634335b135d5728d84c5e0fd726954b87111f7506a61c502280d982" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "ouroboros" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "944fa20996a25aded6b4795c6d63f10014a7a83f8be9828a11860b08c5fc4a67" +dependencies = [ + "aliasable", + "ouroboros_macro", + "static_assertions", +] + +[[package]] +name = "ouroboros_macro" +version = "0.18.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39b0deead1528fd0e5947a8546a9642a9777c25f6e1e26f34c97b204bbb465bd" +dependencies = [ + "heck 0.4.1", + "itertools 0.12.1", + "proc-macro2", + "proc-macro2-diagnostics", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "overload" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" + +[[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.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" +dependencies = [ + "lock_api", + "parking_lot_core", +] + +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + +[[package]] +name = "parse-zoneinfo" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" +dependencies = [ + "regex", +] + +[[package]] +name = "password-hash" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "346f04948ba92c43e8469c1ee6736c7563d71012b17d40745260fe106aac2166" +dependencies = [ + "base64ct", + "rand_core", + "subtle", +] + +[[package]] +name = "paste" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" + +[[package]] +name = "pem" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e459365e590736a54c3fa561947c84837534b8e9af6fc5bf781307e82658fae" +dependencies = [ + "base64 0.22.1", + "serde", +] + +[[package]] +name = "pem-rfc7468" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88b39c9bfcfc231068454382784bb460aae594343fb030d46e9f50a645418412" +dependencies = [ + "base64ct", +] + +[[package]] +name = "percent-encoding" +version = "2.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" + +[[package]] +name = "pest" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "879952a81a83930934cbf1786752d6dedc3b1f29e8f8fb2ad1d0a36f377cf442" +dependencies = [ + "memchr", + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d214365f632b123a47fd913301e14c946c61d1c183ee245fa76eb752e59a02dd" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "eb55586734301717aea2ac313f50b2eb8f60d2fc3dc01d190eefa2e625f60c4e" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "pest_meta" +version = "2.7.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b75da2a70cf4d9cb76833c990ac9cd3923c9a8905a8929789ce347c84564d03d" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "phf" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" +dependencies = [ + "phf_shared", +] + +[[package]] +name = "phf_codegen" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" +dependencies = [ + "phf_generator", + "phf_shared", +] + +[[package]] +name = "phf_generator" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" +dependencies = [ + "phf_shared", + "rand", +] + +[[package]] +name = "phf_shared" +version = "0.11.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" +dependencies = [ + "siphasher", +] + +[[package]] +name = "pin-project-lite" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" + +[[package]] +name = "pin-utils" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" + +[[package]] +name = "piper" +version = "0.2.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96c8c490f422ef9a4efd2cb5b42b76c8613d7e7dfc1caf667b8a3350a5acc066" +dependencies = [ + "atomic-waker", + "fastrand", + "futures-io", +] + +[[package]] +name = "pkcs1" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8ffb9f10fa047879315e6625af03c164b16962a5368d724ed16323b68ace47f" +dependencies = [ + "der", + "pkcs8", + "spki", +] + +[[package]] +name = "pkcs8" +version = "0.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f950b2377845cebe5cf8b5165cb3cc1a5e0fa5cfa3e1f7f55707d8fd82e0a7b7" +dependencies = [ + "der", + "spki", +] + +[[package]] +name = "pkg-config" +version = "0.3.31" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" + +[[package]] +name = "polling" +version = "3.7.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a604568c3202727d1507653cb121dbd627a58684eb09a820fd746bee38b4442f" +dependencies = [ + "cfg-if", + "concurrent-queue", + "hermit-abi 0.4.0", + "pin-project-lite", + "rustix", + "tracing", + "windows-sys 0.59.0", +] + +[[package]] +name = "powerfmt" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" + +[[package]] +name = "ppv-lite86" +version = "0.2.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" +dependencies = [ + "zerocopy", +] + +[[package]] +name = "pretty_assertions" +version = "1.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ae130e2f271fbc2ac3a40fb1d07180839cdbbe443c7a27e1e3c13c5cac0116d" +dependencies = [ + "diff", + "yansi", +] + +[[package]] +name = "proc-macro-crate" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecf48c7ca261d60b74ab1a7b20da18bede46776b2e55535cb958eb595c5fa7b" +dependencies = [ + "toml_edit", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn 1.0.109", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr2" +version = "2.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96de42df36bb9bba5542fe9f1a054b8cc87e172759a1868aa05c1f3acc89dfc5" +dependencies = [ + "proc-macro2", + "quote", +] + +[[package]] +name = "proc-macro-error2" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "11ec05c52be0a07b08061f7dd003e7d7092e0472bc731b4af7bb1ef876109802" +dependencies = [ + "proc-macro-error-attr2", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "proc-macro-hack" +version = "0.5.20+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc375e1527247fe1a97d8b7156678dfe7c1af2fc075c9a4db3690ecd2a148068" + +[[package]] +name = "proc-macro2" +version = "1.0.92" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "version_check", + "yansi", +] + +[[package]] +name = "psm" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "200b9ff220857e53e184257720a14553b2f4aa02577d2ed9842d45d4b9654810" +dependencies = [ + "cc", +] + +[[package]] +name = "ptr_meta" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1" +dependencies = [ + "ptr_meta_derive", +] + +[[package]] +name = "ptr_meta_derive" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "quanta" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e5167a477619228a0b284fac2674e3c388cba90631d7b7de620e6f1fcd08da5" +dependencies = [ + "crossbeam-utils", + "libc", + "once_cell", + "raw-cpuid", + "wasi", + "web-sys", + "winapi", +] + +[[package]] +name = "quote" +version = "1.0.37" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "quoted_printable" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "640c9bd8497b02465aeef5375144c26062e0dcd5939dfcbb0f5db76cb8c17c73" + +[[package]] +name = "radium" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09" + +[[package]] +name = "rand" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" +dependencies = [ + "libc", + "rand_chacha", + "rand_core", +] + +[[package]] +name = "rand_chacha" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" +dependencies = [ + "ppv-lite86", + "rand_core", +] + +[[package]] +name = "rand_core" +version = "0.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" +dependencies = [ + "getrandom", +] + +[[package]] +name = "raw-cpuid" +version = "11.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ab240315c661615f2ee9f0f2cd32d5a7343a84d5ebcccb99d46e6637565e7b0" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redis" +version = "0.22.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa8455fa3621f6b41c514946de66ea0531f57ca017b2e6c7cc368035ea5b46df" +dependencies = [ + "async-trait", + "bytes", + "combine", + "futures-util", + "itoa", + "percent-encoding", + "pin-project-lite", + "ryu", + "sha1_smol", + "tokio", + "tokio-util", + "url", +] + +[[package]] +name = "redox_syscall" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f" +dependencies = [ + "bitflags", +] + +[[package]] +name = "redox_users" +version = "0.4.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43" +dependencies = [ + "getrandom", + "libredox", + "thiserror", +] + +[[package]] +name = "regex" +version = "1.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata 0.4.9", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-automata" +version = "0.1.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" +dependencies = [ + "regex-syntax 0.6.29", +] + +[[package]] +name = "regex-automata" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax 0.8.5", +] + +[[package]] +name = "regex-syntax" +version = "0.6.29" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f162c6dd7b008981e4d40210aca20b4bd0f9b60ca9271061b07f78537722f2e1" + +[[package]] +name = "regex-syntax" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" + +[[package]] +name = "relative-path" +version = "1.9.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba39f3699c378cd8970968dcbff9c43159ea4cfbd88d43c00b22f2ef10a435d2" + +[[package]] +name = "rend" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c" +dependencies = [ + "bytecheck", +] + +[[package]] +name = "reserve-port" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9838134a2bfaa8e1f40738fcc972ac799de6e0e06b5157acb95fc2b05a0ea283" +dependencies = [ + "lazy_static", + "thiserror", +] + +[[package]] +name = "ring" +version = "0.17.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c17fa4cb658e3583423e915b9f3acc01cceaee1860e33d59ebae66adc3a2dc0d" +dependencies = [ + "cc", + "cfg-if", + "getrandom", + "libc", + "spin", + "untrusted", + "windows-sys 0.52.0", +] + +[[package]] +name = "rkyv" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9008cd6385b9e161d8229e1f6549dd23c3d022f132a2ea37ac3a10ac4935779b" +dependencies = [ + "bitvec", + "bytecheck", + "bytes", + "hashbrown 0.12.3", + "ptr_meta", + "rend", + "rkyv_derive", + "seahash", + "tinyvec", + "uuid", +] + +[[package]] +name = "rkyv_derive" +version = "0.7.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "503d1d27590a2b0a3a4ca4c94755aa2875657196ecbf401a42eff41d7de532c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "rrgen" +version = "0.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "98b4f727387732fbf660d79c01c48cbd6b31af89acf62b8f32c716c60b12fecd" +dependencies = [ + "cruet", + "fs-err", + "glob", + "heck 0.4.1", + "regex", + "serde", + "serde_json", + "serde_regex", + "serde_yaml", + "tera", + "thiserror", +] + +[[package]] +name = "rsa" +version = "0.9.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "47c75d7c5c6b673e58bf54d8544a9f432e3a925b0e80f7cd3602ab5c50c55519" +dependencies = [ + "const-oid", + "digest", + "num-bigint-dig", + "num-integer", + "num-traits", + "pkcs1", + "pkcs8", + "rand_core", + "signature", + "spki", + "subtle", + "zeroize", +] + +[[package]] +name = "rstest" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9afd55a67069d6e434a95161415f5beeada95a01c7b815508a82dcb0e1593682" +dependencies = [ + "futures", + "futures-timer", + "rstest_macros", + "rustc_version", +] + +[[package]] +name = "rstest_macros" +version = "0.21.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4165dfae59a39dd41d8dec720d3cbfbc71f69744efb480a3920f5d4e0cc6798d" +dependencies = [ + "cfg-if", + "glob", + "proc-macro-crate", + "proc-macro2", + "quote", + "regex", + "relative-path", + "rustc_version", + "syn 2.0.89", + "unicode-ident", +] + +[[package]] +name = "rust-multipart-rfc7578_2" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03b748410c0afdef2ebbe3685a6a862e2ee937127cdaae623336a459451c8d57" +dependencies = [ + "bytes", + "futures-core", + "futures-util", + "http 0.2.12", + "mime", + "mime_guess", + "rand", + "thiserror", +] + +[[package]] +name = "rust_decimal" +version = "1.36.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b082d80e3e3cc52b2ed634388d436fe1f4de6af5786cc2de9ba9737527bdf555" +dependencies = [ + "arrayvec", + "borsh", + "bytes", + "num-traits", + "rand", + "rkyv", + "serde", + "serde_json", +] + +[[package]] +name = "rustc-demangle" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" + +[[package]] +name = "rustc-hash" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" + +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + +[[package]] +name = "rustix" +version = "0.38.41" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +dependencies = [ + "bitflags", + "errno", + "libc", + "linux-raw-sys", + "windows-sys 0.52.0", +] + +[[package]] +name = "rustls" +version = "0.23.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c9cc1d47e243d655ace55ed38201c19ae02c148ae56412ab8750e8f0166ab7f" +dependencies = [ + "log", + "once_cell", + "ring", + "rustls-pki-types", + "rustls-webpki", + "subtle", + "zeroize", +] + +[[package]] +name = "rustls-pemfile" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dce314e5fee3f39953d46bb63bb8a46d40c2f8fb7cc5a3b6cab2bde9721d6e50" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "rustls-pki-types" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "16f1201b3c9a7ee8039bcadc17b7e605e2945b27eee7631788c1bd2b0643674b" + +[[package]] +name = "rustls-webpki" +version = "0.102.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64ca1bc8749bd4cf37b5ce386cc146580777b4e8572c7b97baf22c83f444bee9" +dependencies = [ + "ring", + "rustls-pki-types", + "untrusted", +] + +[[package]] +name = "rustversion" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e819f2bc632f285be6d7cd36e25940d45b2391dd6d9b939e79de557f7014248" + +[[package]] +name = "rusty-sidekiq" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "15544f047600b602c7b11ff7ee0882f9034f9cbe2c205693edd5615e2a6c03ee" +dependencies = [ + "async-trait", + "bb8", + "chrono", + "convert_case", + "cron_clock", + "gethostname", + "hex", + "num_cpus", + "rand", + "redis", + "serde", + "serde_json", + "serial_test", + "sha2", + "slog-term", + "thiserror", + "tokio", + "tokio-util", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "ryu" +version = "1.0.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" + +[[package]] +name = "same-file" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "scc" +version = "2.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "66b202022bb57c049555430e11fc22fea12909276a80a4c3d368da36ac1d88ed" +dependencies = [ + "sdd", +] + +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + +[[package]] +name = "sdd" +version = "3.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49c1eeaf4b6a87c7479688c6d52b9f1153cedd3c489300564f932b065c6eab95" + +[[package]] +name = "sea-bae" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f694a6ab48f14bc063cfadff30ab551d3c7e46d8f81836c51989d548f44a2a25" +dependencies = [ + "heck 0.4.1", + "proc-macro-error2", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "sea-orm" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5680a8b686985116607ef5f5af2b1f9e1cc2c228330e93101816a0baa279afa" +dependencies = [ + "async-stream", + "async-trait", + "bigdecimal", + "chrono", + "futures", + "log", + "ouroboros", + "rust_decimal", + "sea-orm-macros", + "sea-query", + "sea-query-binder", + "serde", + "serde_json", + "sqlx", + "strum", + "thiserror", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "sea-orm-cli" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70a157f42d291ccbd6e913b9d9b12dbe2ccbcf0472efc60c8715dd1254083aec" +dependencies = [ + "chrono", + "clap", + "dotenvy", + "glob", + "regex", + "sea-schema", + "tracing", + "tracing-subscriber", + "url", +] + +[[package]] +name = "sea-orm-macros" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3a239e3bb1b566ad4ec2654d0d193d6ceddfd733487edc9c21a64d214c773910" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "sea-bae", + "syn 2.0.89", + "unicode-ident", +] + +[[package]] +name = "sea-orm-migration" +version = "1.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "63ba07e9f2479cc671758fcb1edee42ff2e32c34b3e67ab41d0af1e41f73c74e" +dependencies = [ + "async-trait", + "clap", + "dotenvy", + "futures", + "sea-orm", + "sea-orm-cli", + "sea-schema", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "sea-query" +version = "0.32.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ff504d13b5e4b52fffcf2fb203d0352a5722fa5151696db768933e41e1e591bb" +dependencies = [ + "bigdecimal", + "chrono", + "inherent", + "ordered-float", + "rust_decimal", + "sea-query-derive", + "serde_json", + "time", + "uuid", +] + +[[package]] +name = "sea-query-binder" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b0019f47430f7995af63deda77e238c17323359af241233ec768aba1faea7608" +dependencies = [ + "bigdecimal", + "chrono", + "rust_decimal", + "sea-query", + "serde_json", + "sqlx", + "time", + "uuid", +] + +[[package]] +name = "sea-query-derive" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9834af2c4bd8c5162f00c89f1701fb6886119a88062cf76fe842ea9e232b9839" +dependencies = [ + "darling", + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.89", + "thiserror", +] + +[[package]] +name = "sea-schema" +version = "0.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aab1592d17860a9a8584d9b549aebcd06f7bdc3ff615f71752486ba0b05b1e6e" +dependencies = [ + "futures", + "sea-query", + "sea-schema-derive", +] + +[[package]] +name = "sea-schema-derive" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "debdc8729c37fdbf88472f97fd470393089f997a909e535ff67c544d18cfccf0" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "seahash" +version = "4.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b" + +[[package]] +name = "self_cell" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e14e4d63b804dc0c7ec4a1e52bcb63f02c7ac94476755aa579edac21e01f915d" +dependencies = [ + "self_cell 1.0.4", +] + +[[package]] +name = "self_cell" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d369a96f978623eb3dc28807c4852d6cc617fed53da5d3c400feff1ef34a714a" + +[[package]] +name = "semver" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61697e0a1c7e512e84a621326239844a24d8207b4669b41bc18b32ea5cbf988b" + +[[package]] +name = "serde" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.215" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "serde_json" +version = "1.0.133" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" +dependencies = [ + "itoa", + "memchr", + "ryu", + "serde", +] + +[[package]] +name = "serde_path_to_error" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af99884400da37c88f5e9146b7f1fd0fbcae8f6eec4e9da38b67d05486f814a6" +dependencies = [ + "itoa", + "serde", +] + +[[package]] +name = "serde_regex" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8136f1a4ea815d7eac4101cfd0b16dc0cb5e1fe1b8609dfd728058656b7badf" +dependencies = [ + "regex", + "serde", +] + +[[package]] +name = "serde_spanned" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87607cb1398ed59d48732e575a4c28a7a8ebf2454b964fe3f224f2afc07909e1" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_urlencoded" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" +dependencies = [ + "form_urlencoded", + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "serde_variant" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a0068df419f9d9b6488fdded3f1c818522cdea328e02ce9d9f147380265a432" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_yaml" +version = "0.9.34+deprecated" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" +dependencies = [ + "indexmap", + "itoa", + "ryu", + "serde", + "unsafe-libyaml", +] + +[[package]] +name = "serial_test" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b258109f244e1d6891bf1053a55d63a5cd4f8f4c30cf9a1280989f80e7a1fa9" +dependencies = [ + "futures", + "log", + "once_cell", + "parking_lot", + "scc", + "serial_test_derive", +] + +[[package]] +name = "serial_test_derive" +version = "3.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d69265a08751de7844521fd15003ae0a888e035773ba05695c5c759a6f89eef" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "sha1" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sha1_smol" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bbfa15b3dddfee50a0fff136974b3e1bde555604ba463834a7eb7deb6417705d" + +[[package]] +name = "sha2" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "sharded-slab" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f40ca3c46823713e0d4209592e8d6e826aa57e928f09752619fc696c499637f6" +dependencies = [ + "lazy_static", +] + +[[package]] +name = "shared_child" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09fa9338aed9a1df411814a5b2252f7cd206c55ae9bf2fa763f8de84603aa60c" +dependencies = [ + "libc", + "windows-sys 0.59.0", +] + +[[package]] +name = "shell-words" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" + +[[package]] +name = "shlex" +version = "1.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" + +[[package]] +name = "signal-hook-registry" +version = "1.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" +dependencies = [ + "libc", +] + +[[package]] +name = "signature" +version = "2.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "77549399552de45a898a580c1b41d445bf730df867cc44e6c0233bbc4b8329de" +dependencies = [ + "digest", + "rand_core", +] + +[[package]] +name = "simdutf8" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e3a9fe34e3e7a50316060351f37187a3f546bce95496156754b601a5fa71b76e" + +[[package]] +name = "similar" +version = "2.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1de1d4f81173b03af4c0cbed3c898f6bff5b870e4a7f5d6f4057d62a7a4b686e" + +[[package]] +name = "simple_asn1" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adc4e5204eb1910f40f9cfa375f6f05b68c3abac4b6fd879c8ff5e7ae8a0a085" +dependencies = [ + "num-bigint", + "num-traits", + "thiserror", + "time", +] + +[[package]] +name = "siphasher" +version = "0.3.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" + +[[package]] +name = "slab" +version = "0.4.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" +dependencies = [ + "autocfg", +] + +[[package]] +name = "slog" +version = "2.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06" + +[[package]] +name = "slog-term" +version = "2.9.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6e022d0b998abfe5c3782c1f03551a596269450ccd677ea51c56f8b214610e8" +dependencies = [ + "is-terminal", + "slog", + "term", + "thread_local", + "time", +] + +[[package]] +name = "slug" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724" +dependencies = [ + "deunicode", + "wasm-bindgen", +] + +[[package]] +name = "smallvec" +version = "1.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" +dependencies = [ + "serde", +] + +[[package]] +name = "snafu" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4de37ad025c587a29e8f3f5605c00f70b98715ef90b9061a815b9e59e9042d6" +dependencies = [ + "doc-comment", + "snafu-derive 0.7.5", +] + +[[package]] +name = "snafu" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "223891c85e2a29c3fe8fb900c1fae5e69c2e42415e3177752e8718475efa5019" +dependencies = [ + "snafu-derive 0.8.5", +] + +[[package]] +name = "snafu-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "990079665f075b699031e9c08fd3ab99be5029b96f3b78dc0709e8f77e4efebf" +dependencies = [ + "heck 0.4.1", + "proc-macro2", + "quote", + "syn 1.0.109", +] + +[[package]] +name = "snafu-derive" +version = "0.8.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03c3c6b7927ffe7ecaa769ee0e3994da3b8cafc8f444578982c83ecb161af917" +dependencies = [ + "heck 0.5.0", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "socket2" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c" +dependencies = [ + "libc", + "windows-sys 0.52.0", +] + +[[package]] +name = "spin" +version = "0.9.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6980e8d7511241f8acf4aebddbb1ff938df5eebe98691418c4468d0b72a96a67" +dependencies = [ + "lock_api", +] + +[[package]] +name = "spki" +version = "0.7.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d91ed6c858b01f942cd56b37a94b3e0a1798290327d1236e4d9cf4eaca44d29d" +dependencies = [ + "base64ct", + "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.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "93334716a037193fac19df402f8571269c84a00852f6a7066b5d2616dcd64d3e" +dependencies = [ + "sqlx-core", + "sqlx-macros", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", +] + +[[package]] +name = "sqlx-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d4d8060b456358185f7d50c55d9b5066ad956956fddec42ee2e8567134a8936e" +dependencies = [ + "atoi", + "bigdecimal", + "byteorder", + "bytes", + "chrono", + "crc", + "crossbeam-queue", + "either", + "event-listener 5.3.1", + "futures-channel", + "futures-core", + "futures-intrusive", + "futures-io", + "futures-util", + "hashbrown 0.14.5", + "hashlink", + "hex", + "indexmap", + "log", + "memchr", + "once_cell", + "paste", + "percent-encoding", + "rust_decimal", + "rustls", + "rustls-pemfile", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlformat", + "thiserror", + "time", + "tokio", + "tokio-stream", + "tracing", + "url", + "uuid", + "webpki-roots", +] + +[[package]] +name = "sqlx-macros" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cac0692bcc9de3b073e8d747391827297e075c7710ff6276d9f7a1f3d58c6657" +dependencies = [ + "proc-macro2", + "quote", + "sqlx-core", + "sqlx-macros-core", + "syn 2.0.89", +] + +[[package]] +name = "sqlx-macros-core" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1804e8a7c7865599c9c79be146dc8a9fd8cc86935fa641d3ea58e5f0688abaa5" +dependencies = [ + "dotenvy", + "either", + "heck 0.5.0", + "hex", + "once_cell", + "proc-macro2", + "quote", + "serde", + "serde_json", + "sha2", + "sqlx-core", + "sqlx-mysql", + "sqlx-postgres", + "sqlx-sqlite", + "syn 2.0.89", + "tempfile", + "tokio", + "url", +] + +[[package]] +name = "sqlx-mysql" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "64bb4714269afa44aef2755150a0fc19d756fb580a67db8885608cf02f47d06a" +dependencies = [ + "atoi", + "base64 0.22.1", + "bigdecimal", + "bitflags", + "byteorder", + "bytes", + "chrono", + "crc", + "digest", + "dotenvy", + "either", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "generic-array", + "hex", + "hkdf", + "hmac", + "itoa", + "log", + "md-5", + "memchr", + "once_cell", + "percent-encoding", + "rand", + "rsa", + "rust_decimal", + "serde", + "sha1", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "time", + "tracing", + "uuid", + "whoami", +] + +[[package]] +name = "sqlx-postgres" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6fa91a732d854c5d7726349bb4bb879bb9478993ceb764247660aee25f67c2f8" +dependencies = [ + "atoi", + "base64 0.22.1", + "bigdecimal", + "bitflags", + "byteorder", + "chrono", + "crc", + "dotenvy", + "etcetera", + "futures-channel", + "futures-core", + "futures-io", + "futures-util", + "hex", + "hkdf", + "hmac", + "home", + "itoa", + "log", + "md-5", + "memchr", + "num-bigint", + "once_cell", + "rand", + "rust_decimal", + "serde", + "serde_json", + "sha2", + "smallvec", + "sqlx-core", + "stringprep", + "thiserror", + "time", + "tracing", + "uuid", + "whoami", +] + +[[package]] +name = "sqlx-sqlite" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d5b2cf34a45953bfd3daaf3db0f7a7878ab9b7a6b91b422d24a7a9e4c857b680" +dependencies = [ + "atoi", + "chrono", + "flume 0.11.1", + "futures-channel", + "futures-core", + "futures-executor", + "futures-intrusive", + "futures-util", + "libsqlite3-sys", + "log", + "percent-encoding", + "serde", + "serde_urlencoded", + "sqlx-core", + "time", + "tracing", + "url", + "uuid", +] + +[[package]] +name = "stable_deref_trait" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" + +[[package]] +name = "stacker" +version = "0.1.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799c883d55abdb5e98af1a7b3f23b9b6de8ecada0ecac058672d7635eb48ca7b" +dependencies = [ + "cc", + "cfg-if", + "libc", + "psm", + "windows-sys 0.59.0", +] + +[[package]] +name = "static_assertions" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" + +[[package]] +name = "stringprep" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4df3d392d81bd458a8a621b8bffbd2302a12ffe288a9d931670948749463b1" +dependencies = [ + "unicode-bidi", + "unicode-normalization", + "unicode-properties", +] + +[[package]] +name = "strsim" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" + +[[package]] +name = "strum" +version = "0.26.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" + +[[package]] +name = "subtle" +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.89" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "sync_wrapper" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2047c6ded9c721764247e62cd3b03c09ffc529b2ba5b10ec482ae507a4a70160" + +[[package]] +name = "sync_wrapper" +version = "1.0.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0bf256ce5efdfa370213c1dabab5935a12e49f2c58d15e9eac2870d3b4f27263" + +[[package]] +name = "synstructure" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "tagptr" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417" + +[[package]] +name = "tap" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" + +[[package]] +name = "tempfile" +version = "3.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28cce251fcbc87fac86a866eeb0d6c2d536fc16d06f184bb61aeae11aa4cee0c" +dependencies = [ + "cfg-if", + "fastrand", + "once_cell", + "rustix", + "windows-sys 0.59.0", +] + +[[package]] +name = "tera" +version = "1.20.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee" +dependencies = [ + "chrono", + "chrono-tz", + "globwalk", + "humansize", + "lazy_static", + "percent-encoding", + "pest", + "pest_derive", + "rand", + "regex", + "serde", + "serde_json", + "slug", + "unic-segment", +] + +[[package]] +name = "term" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c59df8ac95d96ff9bede18eb7300b0fda5e5d8d90960e76f8e14ae765eedbf1f" +dependencies = [ + "dirs-next", + "rustversion", + "winapi", +] + +[[package]] +name = "thiserror" +version = "1.0.69" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" +dependencies = [ + "thiserror-impl", +] + +[[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.89", +] + +[[package]] +name = "thoth" +version = "0.1.0" +dependencies = [ + "async-trait", + "axum", + "chrono", + "fluent-templates", + "include_dir", + "insta", + "loco-rs", + "migration", + "rstest", + "sea-orm", + "serde", + "serde_json", + "serial_test", + "tokio", + "tracing", + "tracing-subscriber", + "unic-langid", + "uuid", + "validator", +] + +[[package]] +name = "thousands" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3bf63baf9f5039dadc247375c29eb13706706cfde997d0330d05aa63a77d8820" + +[[package]] +name = "thread_local" +version = "1.1.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8b9ef9bad013ada3808854ceac7b46812a6465ba368859a37e2100283d2d719c" +dependencies = [ + "cfg-if", + "once_cell", +] + +[[package]] +name = "time" +version = "0.3.36" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +dependencies = [ + "deranged", + "itoa", + "num-conv", + "powerfmt", + "serde", + "time-core", + "time-macros", +] + +[[package]] +name = "time-core" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" + +[[package]] +name = "time-macros" +version = "0.2.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +dependencies = [ + "num-conv", + "time-core", +] + +[[package]] +name = "tinystr" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" +dependencies = [ + "displaydoc", + "zerovec", +] + +[[package]] +name = "tinyvec" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" +dependencies = [ + "tinyvec_macros", +] + +[[package]] +name = "tinyvec_macros" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" + +[[package]] +name = "tokio" +version = "1.41.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33" +dependencies = [ + "backtrace", + "bytes", + "libc", + "mio", + "parking_lot", + "pin-project-lite", + "signal-hook-registry", + "socket2", + "tokio-macros", + "windows-sys 0.52.0", +] + +[[package]] +name = "tokio-cron-scheduler" +version = "0.11.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2594dd7c2abbbafbb1c78d167fd10860dc7bd75f814cb051a1e0d3e796b9702" +dependencies = [ + "chrono", + "cron", + "num-derive", + "num-traits", + "tokio", + "tracing", + "uuid", +] + +[[package]] +name = "tokio-macros" +version = "2.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "tokio-rustls" +version = "0.26.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0c7bc40d0e5a97695bb96e27995cd3a08538541b0a846f65bba7a359f36700d4" +dependencies = [ + "rustls", + "rustls-pki-types", + "tokio", +] + +[[package]] +name = "tokio-stream" +version = "0.1.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4f4e6ce100d0eb49a2734f8c0812bcd324cf357d21810932c5df6b96ef2b86f1" +dependencies = [ + "futures-core", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "tokio-util" +version = "0.7.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a" +dependencies = [ + "bytes", + "futures-core", + "futures-sink", + "pin-project-lite", + "tokio", +] + +[[package]] +name = "toml" +version = "0.8.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1ed1f98e3fdc28d6d910e6737ae6ab1a93bf1985935a1193e68f93eeb68d24e" +dependencies = [ + "serde", + "serde_spanned", + "toml_datetime", + "toml_edit", +] + +[[package]] +name = "toml_datetime" +version = "0.6.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0dd7358ecb8fc2f8d014bf86f6f638ce72ba252a2c3a2572f2a795f1d23efb41" +dependencies = [ + "serde", +] + +[[package]] +name = "toml_edit" +version = "0.22.22" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ae48d6208a266e853d946088ed816055e556cc6028c5e8e2b84d9fa5dd7c7f5" +dependencies = [ + "indexmap", + "serde", + "serde_spanned", + "toml_datetime", + "winnow", +] + +[[package]] +name = "tower" +version = "0.4.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c" +dependencies = [ + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2873938d487c3cfb9aed7546dc9f2711d867c9f90c46b889989a2cb84eba6b4f" +dependencies = [ + "futures-core", + "futures-util", + "pin-project-lite", + "sync_wrapper 0.1.2", + "tokio", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-http" +version = "0.6.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "403fa3b783d4b626a8ad51d766ab03cb6d2dbfc46b1c5d4448395e6628dc9697" +dependencies = [ + "async-compression", + "bitflags", + "bytes", + "futures-core", + "futures-util", + "http 1.1.0", + "http-body", + "http-body-util", + "http-range-header", + "httpdate", + "mime", + "mime_guess", + "percent-encoding", + "pin-project-lite", + "tokio", + "tokio-util", + "tower-layer", + "tower-service", + "tracing", +] + +[[package]] +name = "tower-layer" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e" + +[[package]] +name = "tower-service" +version = "0.3.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3" + +[[package]] +name = "tracing" +version = "0.1.40" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef" +dependencies = [ + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", +] + +[[package]] +name = "tracing-appender" +version = "0.2.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3566e8ce28cc0a3fe42519fc80e6b4c943cc4c8cef275620eb8dac2d3d4e06cf" +dependencies = [ + "crossbeam-channel", + "thiserror", + "time", + "tracing-subscriber", +] + +[[package]] +name = "tracing-attributes" +version = "0.1.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "395ae124c09f9e6918a2310af6038fba074bcf474ac352496d5910dd59a2226d" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "tracing-core" +version = "0.1.33" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" +dependencies = [ + "once_cell", + "valuable", +] + +[[package]] +name = "tracing-log" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee855f1f400bd0e5c02d150ae5de3840039a3f54b025156404e34c23c03f47c3" +dependencies = [ + "log", + "once_cell", + "tracing-core", +] + +[[package]] +name = "tracing-serde" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1" +dependencies = [ + "serde", + "tracing-core", +] + +[[package]] +name = "tracing-subscriber" +version = "0.3.18" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b" +dependencies = [ + "matchers", + "nu-ansi-term", + "once_cell", + "regex", + "serde", + "serde_json", + "sharded-slab", + "smallvec", + "thread_local", + "tracing", + "tracing-core", + "tracing-log", + "tracing-serde", +] + +[[package]] +name = "triomphe" +version = "0.1.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "859eb650cfee7434994602c3a68b25d77ad9e68c8a6cd491616ef86661382eb3" + +[[package]] +name = "try-lock" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b" + +[[package]] +name = "type-map" +version = "0.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "deb68604048ff8fa93347f02441e4487594adc20bb8a084f9e564d2b827a0a9f" +dependencies = [ + "rustc-hash", +] + +[[package]] +name = "typenum" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" + +[[package]] +name = "ucd-trie" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" + +[[package]] +name = "ulid" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "04f903f293d11f31c0c29e4148f6dc0d033a7f80cebc0282bea147611667d289" +dependencies = [ + "getrandom", + "rand", + "web-time", +] + +[[package]] +name = "unic-char-property" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" +dependencies = [ + "unic-char-range", +] + +[[package]] +name = "unic-char-range" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" + +[[package]] +name = "unic-common" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" + +[[package]] +name = "unic-langid" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "23dd9d1e72a73b25e07123a80776aae3e7b0ec461ef94f9151eed6ec88005a44" +dependencies = [ + "unic-langid-impl", + "unic-langid-macros", +] + +[[package]] +name = "unic-langid-impl" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0a5422c1f65949306c99240b81de9f3f15929f5a8bfe05bb44b034cc8bf593e5" +dependencies = [ + "tinystr", +] + +[[package]] +name = "unic-langid-macros" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0da1cd2c042d3c7569a1008806b02039e7a4a2bdf8f8e96bd3c792434a0e275e" +dependencies = [ + "proc-macro-hack", + "tinystr", + "unic-langid-impl", + "unic-langid-macros-impl", +] + +[[package]] +name = "unic-langid-macros-impl" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ed7f4237ba393424195053097c1516bd4590dc82b84f2f97c5c69e12704555b" +dependencies = [ + "proc-macro-hack", + "quote", + "syn 2.0.89", + "unic-langid-impl", +] + +[[package]] +name = "unic-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" +dependencies = [ + "unic-ucd-segment", +] + +[[package]] +name = "unic-ucd-segment" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" +dependencies = [ + "unic-char-property", + "unic-char-range", + "unic-ucd-version", +] + +[[package]] +name = "unic-ucd-version" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" +dependencies = [ + "unic-common", +] + +[[package]] +name = "unicase" +version = "2.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" + +[[package]] +name = "unicode-bidi" +version = "0.3.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" + +[[package]] +name = "unicode-ident" +version = "1.0.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" + +[[package]] +name = "unicode-normalization" +version = "0.1.24" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5033c97c4262335cded6d6fc3e5c18ab755e1a3dc96376350f3d8e9f009ad956" +dependencies = [ + "tinyvec", +] + +[[package]] +name = "unicode-properties" +version = "0.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" + +[[package]] +name = "unicode-segmentation" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6ccf251212114b54433ec949fd6a7841275f9ada20dddd2f29e9ceea4501493" + +[[package]] +name = "unicode-width" +version = "0.1.14" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" + +[[package]] +name = "unicode_categories" +version = "0.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" + +[[package]] +name = "unsafe-libyaml" +version = "0.2.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" + +[[package]] +name = "untrusted" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1" + +[[package]] +name = "url" +version = "2.5.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" +dependencies = [ + "form_urlencoded", + "idna 1.0.3", + "percent-encoding", +] + +[[package]] +name = "utf16_iter" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" + +[[package]] +name = "utf8-width" +version = "0.1.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "86bd8d4e895da8537e5315b8254664e6b769c4ff3db18321b297a1e7004392e3" + +[[package]] +name = "utf8_iter" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" + +[[package]] +name = "utf8parse" +version = "0.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" + +[[package]] +name = "uuid" +version = "1.11.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f8c5f0a0af699448548ad1a2fbf920fb4bee257eae39953ba95cb84891a0446a" +dependencies = [ + "getrandom", + "rand", + "serde", +] + +[[package]] +name = "validator" +version = "0.18.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "db79c75af171630a3148bd3e6d7c4f42b6a9a014c2945bc5ed0020cbb8d9478e" +dependencies = [ + "idna 0.5.0", + "once_cell", + "regex", + "serde", + "serde_derive", + "serde_json", + "url", + "validator_derive", +] + +[[package]] +name = "validator_derive" +version = "0.18.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df0bcf92720c40105ac4b2dda2a4ea3aa717d4d6a862cc217da653a4bd5c6b10" +dependencies = [ + "darling", + "once_cell", + "proc-macro-error", + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "valuable" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d" + +[[package]] +name = "value-bag" +version = "1.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3ef4c4aa54d5d05a279399bfa921ec387b7aba77caf7a682ae8d86785b8fdad2" + +[[package]] +name = "vcpkg" +version = "0.2.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426" + +[[package]] +name = "version_check" +version = "0.9.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" + +[[package]] +name = "walkdir" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" +dependencies = [ + "same-file", + "winapi-util", +] + +[[package]] +name = "want" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e" +dependencies = [ + "try-lock", +] + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "wasite" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b" + +[[package]] +name = "wasm-bindgen" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e" +dependencies = [ + "cfg-if", + "once_cell", + "wasm-bindgen-macro", +] + +[[package]] +name = "wasm-bindgen-backend" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358" +dependencies = [ + "bumpalo", + "log", + "once_cell", + "proc-macro2", + "quote", + "syn 2.0.89", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-futures" +version = "0.4.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b" +dependencies = [ + "cfg-if", + "js-sys", + "wasm-bindgen", + "web-sys", +] + +[[package]] +name = "wasm-bindgen-macro" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56" +dependencies = [ + "quote", + "wasm-bindgen-macro-support", +] + +[[package]] +name = "wasm-bindgen-macro-support" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "wasm-bindgen-backend", + "wasm-bindgen-shared", +] + +[[package]] +name = "wasm-bindgen-shared" +version = "0.2.95" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d" + +[[package]] +name = "web-sys" +version = "0.3.72" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "web-time" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a6580f308b1fad9207618087a65c04e7a10bc77e02c8e84e9b00dd4b12fa0bb" +dependencies = [ + "js-sys", + "wasm-bindgen", +] + +[[package]] +name = "webpki-roots" +version = "0.26.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5d642ff16b7e79272ae451b7322067cdc17cadf68c23264be9d94a32319efe7e" +dependencies = [ + "rustls-pki-types", +] + +[[package]] +name = "whoami" +version = "1.5.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d" +dependencies = [ + "redox_syscall", + "wasite", +] + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" +dependencies = [ + "windows-sys 0.59.0", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e48a53791691ab099e5e2ad123536d0fff50652600abaf43bbf952894110d0be" +dependencies = [ + "windows-core", + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-core" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.48.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9" +dependencies = [ + "windows-targets 0.48.5", +] + +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + +[[package]] +name = "windows-targets" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c" +dependencies = [ + "windows_aarch64_gnullvm 0.48.5", + "windows_aarch64_msvc 0.48.5", + "windows_i686_gnu 0.48.5", + "windows_i686_msvc 0.48.5", + "windows_x86_64_gnu 0.48.5", + "windows_x86_64_gnullvm 0.48.5", + "windows_x86_64_msvc 0.48.5", +] + +[[package]] +name = "windows-targets" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" +dependencies = [ + "windows_aarch64_gnullvm 0.52.6", + "windows_aarch64_msvc 0.52.6", + "windows_i686_gnu 0.52.6", + "windows_i686_gnullvm", + "windows_i686_msvc 0.52.6", + "windows_x86_64_gnu 0.52.6", + "windows_x86_64_gnullvm 0.52.6", + "windows_x86_64_msvc 0.52.6", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8" + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" + +[[package]] +name = "windows_i686_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e" + +[[package]] +name = "windows_i686_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" + +[[package]] +name = "windows_i686_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" + +[[package]] +name = "windows_i686_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406" + +[[package]] +name = "windows_i686_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.48.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.52.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" + +[[package]] +name = "winnow" +version = "0.6.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36c1fec1a2bb5866f07c25f68c26e565c4c200aebb96d7e55710c19d3e8ac49b" +dependencies = [ + "memchr", +] + +[[package]] +name = "write16" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" + +[[package]] +name = "writeable" +version = "0.5.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" + +[[package]] +name = "wyz" +version = "0.5.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed" +dependencies = [ + "tap", +] + +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + +[[package]] +name = "yoke" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" +dependencies = [ + "serde", + "stable_deref_trait", + "yoke-derive", + "zerofrom", +] + +[[package]] +name = "yoke-derive" +version = "0.7.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure", +] + +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "byteorder", + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "zerofrom" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" +dependencies = [ + "zerofrom-derive", +] + +[[package]] +name = "zerofrom-derive" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", + "synstructure", +] + +[[package]] +name = "zeroize" +version = "1.8.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde" + +[[package]] +name = "zerovec" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" +dependencies = [ + "yoke", + "zerofrom", + "zerovec-derive", +] + +[[package]] +name = "zerovec-derive" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.89", +] + +[[package]] +name = "zstd" +version = "0.13.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" +dependencies = [ + "zstd-safe", +] + +[[package]] +name = "zstd-safe" +version = "7.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" +dependencies = [ + "zstd-sys", +] + +[[package]] +name = "zstd-sys" +version = "2.0.13+zstd.1.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" +dependencies = [ + "cc", + "pkg-config", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..12a3628 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,51 @@ +[workspace] + +[package] +name = "thoth" +version = "0.1.0" +edition = "2021" +publish = false +default-run = "thoth-cli" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[workspace.dependencies] +loco-rs = { version = "0.13.2" } + +[dependencies] +loco-rs = { workspace = true } +serde = { version = "1", features = ["derive"] } +serde_json = "1" +tokio = { version = "1.33.0", default-features = false, features = [ + "rt-multi-thread", +] } +async-trait = "0.1.74" +axum = "0.7.5" +tracing = "0.1.40" +tracing-subscriber = { version = "0.3.17", features = ["env-filter", "json"] } +migration = { path = "migration" } +sea-orm = { version = "1.1.0", features = [ + "sqlx-sqlite", + "sqlx-postgres", + "runtime-tokio-rustls", + "macros", +] } +chrono = "0.4" +validator = { version = "0.18" } +uuid = { version = "1.6.0", features = ["v4"] } +include_dir = "0.7" +# view engine i18n +fluent-templates = { version = "0.8.0", features = ["tera"] } +unic-langid = "0.9.4" +# /view engine + +[[bin]] +name = "thoth-cli" +path = "src/bin/main.rs" +required-features = [] + +[dev-dependencies] +loco-rs = { workspace = true, features = ["testing"] } +serial_test = "3.1.1" +rstest = "0.21.0" +insta = { version = "1.34.0", features = ["redactions", "yaml", "filters"] } diff --git a/README.md b/README.md new file mode 100644 index 0000000..43b9bdd --- /dev/null +++ b/README.md @@ -0,0 +1,58 @@ +# Welcome to Loco :train: + +[Loco](https://loco.rs) is a web and API framework running on Rust. + +This is the **SaaS starter** which includes a `User` model and authentication based on JWT. +It also include configuration sections that help you pick either a frontend or a server-side template set up for your fullstack server. + + +## Quick Start + +```sh +cargo loco start +``` + +```sh +$ cargo loco start +Finished dev [unoptimized + debuginfo] target(s) in 21.63s + Running `target/debug/myapp start` + + : + : + : + +controller/app_routes.rs:203: [Middleware] Adding log trace id + + ▄ ▀ + ▀ ▄ + ▄ ▀ ▄ ▄ ▄▀ + ▄ ▀▄▄ + ▄ ▀ ▀ ▀▄▀█▄ + ▀█▄ +▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄ ▀▀█ + ██████ █████ ███ █████ ███ █████ ███ ▀█ + ██████ █████ ███ █████ ▀▀▀ █████ ███ ▄█▄ + ██████ █████ ███ █████ █████ ███ ████▄ + ██████ █████ ███ █████ ▄▄▄ █████ ███ █████ + ██████ █████ ███ ████ ███ █████ ███ ████▀ + ▀▀▀██▄ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ██▀ + ▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀ + https://loco.rs + +environment: development + database: automigrate + logger: debug +compilation: debug + modes: server + +listening on http://localhost:5150 +``` + +## Full Stack Serving + +You can check your [configuration](config/development.yaml) to pick either frontend setup or server-side rendered template, and activate the relevant configuration sections. + + +## Getting help + +Check out [a quick tour](https://loco.rs/docs/getting-started/tour/) or [the complete guide](https://loco.rs/docs/getting-started/guide/). diff --git a/assets/i18n/de-DE/main.ftl b/assets/i18n/de-DE/main.ftl new file mode 100644 index 0000000..ced609f --- /dev/null +++ b/assets/i18n/de-DE/main.ftl @@ -0,0 +1,4 @@ +hello-world = Hallo Welt! +greeting = Hallochen { $name }! + .placeholder = Hallo Freund! +about = Uber diff --git a/assets/i18n/en-US/main.ftl b/assets/i18n/en-US/main.ftl new file mode 100644 index 0000000..9d4d5e7 --- /dev/null +++ b/assets/i18n/en-US/main.ftl @@ -0,0 +1,10 @@ +hello-world = Hello World! +greeting = Hello { $name }! + .placeholder = Hello Friend! +about = About +simple = simple text +reference = simple text with a reference: { -something } +parameter = text with a { $param } +parameter2 = text one { $param } second { $multi-word-param } +email = text with an EMAIL("example@example.org") +fallback = this should fall back diff --git a/assets/i18n/shared.ftl b/assets/i18n/shared.ftl new file mode 100644 index 0000000..f169eca --- /dev/null +++ b/assets/i18n/shared.ftl @@ -0,0 +1 @@ +-something = foo diff --git a/assets/static/404.html b/assets/static/404.html new file mode 100644 index 0000000..66e78fb --- /dev/null +++ b/assets/static/404.html @@ -0,0 +1,3 @@ + +not found :-( + diff --git a/assets/static/image.png b/assets/static/image.png new file mode 100644 index 0000000000000000000000000000000000000000..fa5a09508d1b4510e2de0cb7d0fa20a44eb631c6 GIT binary patch literal 304720 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

  • 8?k1{!sg04J;Yabx1M&+b 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

    55vd@UVBpKtSOfwkiiKp5N0Lxw65dy*`cO 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 MboFyt=akR{0Lq<+n*aa+ literal 0 HcmV?d00001 diff --git a/assets/views/home/hello.html b/assets/views/home/hello.html new file mode 100644 index 0000000..6b97c39 --- /dev/null +++ b/assets/views/home/hello.html @@ -0,0 +1,12 @@ + + +
    + find this tera template at assets/views/home/hello.html: +
    +
    + {{ t(key="hello-world", lang="en-US") }}, +
    + {{ t(key="hello-world", lang="de-DE") }} + + + \ No newline at end of file diff --git a/config/development.yaml b/config/development.yaml new file mode 100644 index 0000000..51749fd --- /dev/null +++ b/config/development.yaml @@ -0,0 +1,95 @@ +# Loco configuration file documentation + +# Application logging configuration +logger: + # Enable or disable logging. + enable: true + # Enable pretty backtrace (sets RUST_BACKTRACE=1) + pretty_backtrace: true + # Log level, options: trace, debug, info, warn or error. + level: debug + # Define the logging format. options: compact, pretty or json + format: compact + # By default the logger has filtering only logs that came from your code or logs that came from `loco` framework. to see all third party libraries + # Uncomment the line below to override to see all third party libraries you can enable this config and override the logger filters. + # override_filter: trace + +# Web server configuration +server: + # Port on which the server will listen. the server binding is 0.0.0.0:{PORT} + port: 5150 + # The UI hostname or IP address that mailers will point to. + host: http://localhost + # Out of the box middleware configuration. to disable middleware you can changed the `enable` field to `false` of comment the middleware block + middlewares: + static: + enable: true + must_exist: true + precompressed: false + folder: + uri: "/static" + path: "assets/static" + fallback: "assets/static/404.html" + +# Worker Configuration +workers: + # specifies the worker mode. Options: + # - BackgroundQueue - Workers operate asynchronously in the background, processing queued. + # - ForegroundBlocking - Workers operate in the foreground and block until tasks are completed. + # - BackgroundAsync - Workers operate asynchronously in the background, processing tasks with async capabilities. + mode: BackgroundAsync + + + +# Mailer Configuration. +mailer: + # SMTP mailer configuration. + smtp: + # Enable/Disable smtp mailer. + enable: true + # SMTP server host. e.x localhost, smtp.gmail.com + host: localhost + # SMTP server port + port: 1025 + # Use secure connection (SSL/TLS). + secure: false + # auth: + # user: + # password: + +# Initializers Configuration +# initializers: +# oauth2: +# authorization_code: # Authorization code grant type +# - client_identifier: google # Identifier for the OAuth2 provider. Replace 'google' with your provider's name if different, must be unique within the oauth2 config. +# ... other fields + +# Database Configuration +database: + # Database connection URI + uri: {{ get_env(name="DATABASE_URL", default="postgres://loco:loco@localhost:5432/thoth_development") }} + # When enabled, the sql query will be logged. + enable_logging: false + # Set the timeout duration when acquiring a connection. + connect_timeout: {{ get_env(name="DB_CONNECT_TIMEOUT", default="500") }} + # Set the idle duration before closing a connection. + idle_timeout: {{ get_env(name="DB_IDLE_TIMEOUT", default="500") }} + # Minimum number of connections for a pool. + min_connections: {{ get_env(name="DB_MIN_CONNECTIONS", default="1") }} + # Maximum number of connections for a pool. + max_connections: {{ get_env(name="DB_MAX_CONNECTIONS", default="1") }} + # Run migration up when application loaded + auto_migrate: true + # Truncate database when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_truncate: false + # Recreating schema when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_recreate: false + +# Authentication Configuration +auth: + # JWT authentication + jwt: + # Secret key for token generation and verification + secret: 30TMCBNXAVZ13jSkdH5t + # Token expiration time in seconds + expiration: 604800 # 7 days diff --git a/config/test.yaml b/config/test.yaml new file mode 100644 index 0000000..a5d2e7f --- /dev/null +++ b/config/test.yaml @@ -0,0 +1,95 @@ +# Loco configuration file documentation + +# Application logging configuration +logger: + # Enable or disable logging. + enable: false + # Enable pretty backtrace (sets RUST_BACKTRACE=1) + pretty_backtrace: true + # Log level, options: trace, debug, info, warn or error. + level: debug + # Define the logging format. options: compact, pretty or json + format: compact + # By default the logger has filtering only logs that came from your code or logs that came from `loco` framework. to see all third party libraries + # Uncomment the line below to override to see all third party libraries you can enable this config and override the logger filters. + # override_filter: trace + +# Web server configuration +server: + # Port on which the server will listen. the server binding is 0.0.0.0:{PORT} + port: 5150 + # The UI hostname or IP address that mailers will point to. + host: http://localhost + # Out of the box middleware configuration. to disable middleware you can changed the `enable` field to `false` of comment the middleware block + middlewares: + static: + enable: true + must_exist: true + precompressed: false + folder: + uri: "/static" + path: "assets/static" + fallback: "assets/static/404.html" + +# Worker Configuration +workers: + # specifies the worker mode. Options: + # - BackgroundQueue - Workers operate asynchronously in the background, processing queued. + # - ForegroundBlocking - Workers operate in the foreground and block until tasks are completed. + # - BackgroundAsync - Workers operate asynchronously in the background, processing tasks with async capabilities. + mode: BackgroundAsync + + + +# Mailer Configuration. +mailer: + # SMTP mailer configuration. + smtp: + # Enable/Disable smtp mailer. + enable: true + # SMTP server host. e.x localhost, smtp.gmail.com + host: localhost + # SMTP server port + port: 1025 + # Use secure connection (SSL/TLS). + secure: false + # auth: + # user: + # password: + +# Initializers Configuration +# initializers: +# oauth2: +# authorization_code: # Authorization code grant type +# - client_identifier: google # Identifier for the OAuth2 provider. Replace 'google' with your provider's name if different, must be unique within the oauth2 config. +# ... other fields + +# Database Configuration +database: + # Database connection URI + uri: {{ get_env(name="DATABASE_URL", default="postgres://loco:loco@localhost:5432/thoth_test") }} + # When enabled, the sql query will be logged. + enable_logging: false + # Set the timeout duration when acquiring a connection. + connect_timeout: {{ get_env(name="DB_CONNECT_TIMEOUT", default="500") }} + # Set the idle duration before closing a connection. + idle_timeout: {{ get_env(name="DB_IDLE_TIMEOUT", default="500") }} + # Minimum number of connections for a pool. + min_connections: {{ get_env(name="DB_MIN_CONNECTIONS", default="1") }} + # Maximum number of connections for a pool. + max_connections: {{ get_env(name="DB_MAX_CONNECTIONS", default="1") }} + # Run migration up when application loaded + auto_migrate: true + # Truncate database when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_truncate: true + # Recreating schema when application loaded. This is a dangerous operation, make sure that you using this flag only on dev environments or test mode + dangerously_recreate: false + +# Authentication Configuration +auth: + # JWT authentication + jwt: + # Secret key for token generation and verification + secret: pt71Z6n9ZKMQImSVP8uh + # Token expiration time in seconds + expiration: 604800 # 7 days diff --git a/examples/playground.rs b/examples/playground.rs new file mode 100644 index 0000000..7253d7a --- /dev/null +++ b/examples/playground.rs @@ -0,0 +1,21 @@ +#[allow(unused_imports)] +use loco_rs::{cli::playground, prelude::*}; +use thoth::app::App; + +#[tokio::main] +async fn main() -> loco_rs::Result<()> { + let _ctx = playground::().await?; + + // let active_model: articles::ActiveModel = ActiveModel { + // title: Set(Some("how to build apps in 3 steps".to_string())), + // content: Set(Some("use Loco: https://loco.rs".to_string())), + // ..Default::default() + // }; + // active_model.insert(&ctx.db).await.unwrap(); + + // let res = articles::Entity::find().all(&ctx.db).await.unwrap(); + // println!("{:?}", res); + println!("welcome to playground. edit me at `examples/playground.rs`"); + + Ok(()) +} diff --git a/frontend/.gitignore b/frontend/.gitignore new file mode 100644 index 0000000..a1dccae --- /dev/null +++ b/frontend/.gitignore @@ -0,0 +1,31 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist-ssr +dist/ +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Common local dotenv files popularised by Create React App & Next.js +# https://rsbuild.dev/guide/advanced/env-vars#env-file +.env.local +.env.development.local +.env.production.local +.env.test.local diff --git a/frontend/README.md b/frontend/README.md new file mode 100644 index 0000000..9fd9aed --- /dev/null +++ b/frontend/README.md @@ -0,0 +1,42 @@ +# SaaS Frontend + +## Batteries included + +- [TypeScript](https://www.typescriptlang.org/): A typed superset of JavaScript +- [Rsbuild](https://rsbuild.dev/): A Rust-based web build tool +- [Biome](https://biomejs.dev/): A Rust-based formatter and sensible linter for the web +- [React](https://reactjs.org/): A JavaScript library for building user interfaces + +If you don't like React for some reason, Rsbuild makes it easy to replace it with something else! + +# Development + +To get started with the development of the SaaS frontend, follow these steps: + +### 1. Install Packages + +Use the following command to install the required packages using pnpm: + +```sh +pnpm install +``` + +### 2. Run in Development Mode + +Once the packages are installed, run your frontend application in development mode with the following command: + +```sh +pnpm dev +``` + +This will start the development frontend server serving via vit + +### 3. Build The application + +To build your application run the following command: + +```sh +pnpm build +``` + +After the build `dist` folder is ready to served by loco. run loco `cargo loco start` and the frontend application will served via Loco \ No newline at end of file diff --git a/frontend/biome.json b/frontend/biome.json new file mode 100644 index 0000000..0dd3251 --- /dev/null +++ b/frontend/biome.json @@ -0,0 +1,24 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.8.2/schema.json", + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "enabled": true, + "indentStyle": "space" + } + }, + "json": { + "formatter": { + "enabled": true, + "indentStyle": "space" + } + } +} diff --git a/frontend/package.json b/frontend/package.json new file mode 100644 index 0000000..dd7a791 --- /dev/null +++ b/frontend/package.json @@ -0,0 +1,24 @@ +{ + "name": "frontend", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "rsbuild dev --open", + "build": "rsbuild build", + "lint": "biome check src/", + "preview": "rsbuild preview" + }, + "dependencies": { + "react": "^18", + "react-dom": "^18" + }, + "devDependencies": { + "@biomejs/biome": "^1", + "@rsbuild/core": "^1", + "@rsbuild/plugin-react": "^1", + "@types/react": "^18", + "@types/react-dom": "^18", + "typescript": "^5" + } +} diff --git a/frontend/rsbuild.config.ts b/frontend/rsbuild.config.ts new file mode 100644 index 0000000..d86582c --- /dev/null +++ b/frontend/rsbuild.config.ts @@ -0,0 +1,20 @@ +import { defineConfig } from "@rsbuild/core"; +import { pluginReact } from "@rsbuild/plugin-react"; + +// https://rsbuild.dev/guide/basic/configure-rsbuild +export default defineConfig({ + plugins: [pluginReact()], + html: { + favicon: "src/assets/favicon.ico", + title: "Loco SaaS Starter", + }, + server: { + proxy: { + "/api": { + target: "http://127.0.0.1:5150", + changeOrigin: true, + secure: false, + }, + }, + }, +}); diff --git a/frontend/src/LocoSplash.tsx b/frontend/src/LocoSplash.tsx new file mode 100644 index 0000000..cb96ace --- /dev/null +++ b/frontend/src/LocoSplash.tsx @@ -0,0 +1,105 @@ +export const LocoSplash = () => { + return ( +

    + ); +}; diff --git a/frontend/src/assets/favicon.ico b/frontend/src/assets/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..07f5b73722d25ce4a2ee7e8bb5aa16c354c44a55 GIT binary patch literal 15406 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 Al>h($ literal 0 HcmV?d00001 diff --git a/frontend/src/env.d.ts b/frontend/src/env.d.ts new file mode 100644 index 0000000..b0ac762 --- /dev/null +++ b/frontend/src/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/frontend/src/index.css b/frontend/src/index.css new file mode 100644 index 0000000..854aa19 --- /dev/null +++ b/frontend/src/index.css @@ -0,0 +1,100 @@ +body { + margin: 0; + font-family: "Arimo", -apple-system, blinkmacsystemfont, "Segoe UI", roboto, "Helvetica Neue", arial, "Noto Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + background: #212529; + color: #dee2e6; + -webkit-text-size-adjust: 100%; + -webkit-tap-highlight-color: rgba(29, 45, 53, 0) +} + +ul { + margin-top: 0; + margin-bottom: 1rem; + list-style: none; +} + +a { + color: #dee2e6; + text-decoration: none +} + +.container { + max-width: 1320px; + padding-right: var(--bs-gutter-x, 24px); + padding-left: var(--bs-gutter-x, 24px); + margin-right: auto; + margin-left: auto +} + + +.navbar { + padding-top: .5rem; + padding-bottom: .5rem +} + +.navbar .container { + display: flex; + justify-content: space-between +} + +.navbar-nav { + margin-bottom: 0; +} +.navbar-nav li { + display: inline-flex; + margin-right: 10px; +} + +.fixed-top { + position: fixed; + top: 0; + right: 0; + left: 0; +} + +body { + font-size: 1rem; + padding-top: 6rem !important +} + +.navbar { + border-bottom: 1px solid #2a2f34; +} + + +.logo { + max-width: 1280px; + margin: 0 auto; + text-align: center; +} + +.logo img { + width: 250px; +} +footer { + position: absolute; + bottom: 0; + width: 100%; + text-align: center; +} + +footer ul { + display: inline-block; + padding: 0; +} + +footer ul li { + display: inline-flex; + align-items: center; + margin: 0 5px; + list-style: none; +} + +footer ul li:not(:last-child) { + border-right: 1px solid #ccc; + padding-right: 5px; + height: 15px; +} \ No newline at end of file diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx new file mode 100644 index 0000000..8d48a1d --- /dev/null +++ b/frontend/src/index.tsx @@ -0,0 +1,17 @@ +import React from "react"; +import ReactDOM from "react-dom/client"; +import { LocoSplash } from "./LocoSplash"; + +import "./index.css"; + +const root = document.getElementById("root"); + +if (!root) { + throw new Error("No root element found"); +} + +ReactDOM.createRoot(root).render( + + + , +); diff --git a/frontend/tsconfig.json b/frontend/tsconfig.json new file mode 100644 index 0000000..e6b9bdf --- /dev/null +++ b/frontend/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["DOM", "ES2020"], + "module": "ESNext", + "jsx": "react-jsx", + "strict": true, + "skipLibCheck": true, + "isolatedModules": true, + "resolveJsonModule": true, + "moduleResolution": "bundler", + "useDefineForClassFields": true + }, + "include": ["src"] +} diff --git a/migration/Cargo.toml b/migration/Cargo.toml new file mode 100644 index 0000000..cb2ad9b --- /dev/null +++ b/migration/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "migration" +version = "0.1.0" +edition = "2021" +publish = false + +[lib] +name = "migration" +path = "src/lib.rs" + +[dependencies] +async-std = { version = "1", features = ["attributes", "tokio1"] } +loco-rs = { workspace = true } + + +[dependencies.sea-orm-migration] +version = "1.1.0" +features = [ + # Enable at least one `ASYNC_RUNTIME` and `DATABASE_DRIVER` feature if you want to run migration via CLI. + # View the list of supported features at https://www.sea-ql.org/SeaORM/docs/install-and-config/database-and-async-runtime. + # e.g. + "runtime-tokio-rustls", # `ASYNC_RUNTIME` feature +] diff --git a/migration/src/lib.rs b/migration/src/lib.rs new file mode 100644 index 0000000..d37c3d1 --- /dev/null +++ b/migration/src/lib.rs @@ -0,0 +1,17 @@ +#![allow(elided_lifetimes_in_paths)] +#![allow(clippy::wildcard_imports)] +pub use sea_orm_migration::prelude::*; + +mod m20220101_000001_users; + +pub struct Migrator; + +#[async_trait::async_trait] +impl MigratorTrait for Migrator { + fn migrations() -> Vec> { + vec![ + Box::new(m20220101_000001_users::Migration), + // inject-above (do not remove this comment) + ] + } +} diff --git a/migration/src/m20220101_000001_users.rs b/migration/src/m20220101_000001_users.rs new file mode 100644 index 0000000..936ad3d --- /dev/null +++ b/migration/src/m20220101_000001_users.rs @@ -0,0 +1,50 @@ +use loco_rs::schema::table_auto_tz; +use sea_orm_migration::{prelude::*, schema::*}; + +#[derive(DeriveMigrationName)] +pub struct Migration; + +#[async_trait::async_trait] +impl MigrationTrait for Migration { + async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { + let table = table_auto_tz(Users::Table) + .col(pk_auto(Users::Id)) + .col(uuid(Users::Pid)) + .col(string_uniq(Users::Email)) + .col(string(Users::Password)) + .col(string(Users::ApiKey).unique_key()) + .col(string(Users::Name)) + .col(string_null(Users::ResetToken)) + .col(timestamp_with_time_zone_null(Users::ResetSentAt)) + .col(string_null(Users::EmailVerificationToken)) + .col(timestamp_with_time_zone_null( + Users::EmailVerificationSentAt, + )) + .col(timestamp_with_time_zone_null(Users::EmailVerifiedAt)) + .to_owned(); + manager.create_table(table).await?; + Ok(()) + } + + async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { + manager + .drop_table(Table::drop().table(Users::Table).to_owned()) + .await + } +} + +#[derive(Iden)] +pub enum Users { + Table, + Id, + Pid, + Email, + Name, + Password, + ApiKey, + ResetToken, + ResetSentAt, + EmailVerificationToken, + EmailVerificationSentAt, + EmailVerifiedAt, +} diff --git a/src/app.rs b/src/app.rs new file mode 100644 index 0000000..e0ec0bf --- /dev/null +++ b/src/app.rs @@ -0,0 +1,68 @@ +use async_trait::async_trait; +use loco_rs::{ + app::{AppContext, Hooks, Initializer}, + bgworker::{BackgroundWorker, Queue}, + boot::{create_app, BootResult, StartMode}, + controller::AppRoutes, + db::{self, truncate_table}, + environment::Environment, + task::Tasks, + Result, +}; +use migration::Migrator; +use sea_orm::DatabaseConnection; +use std::path::Path; + +use crate::{ + controllers, initializers, models::_entities::users, tasks, workers::downloader::DownloadWorker, +}; + +pub struct App; +#[async_trait] +impl Hooks for App { + fn app_name() -> &'static str { + env!("CARGO_CRATE_NAME") + } + + fn app_version() -> String { + format!( + "{} ({})", + env!("CARGO_PKG_VERSION"), + option_env!("BUILD_SHA") + .or(option_env!("GITHUB_SHA")) + .unwrap_or("dev") + ) + } + + async fn boot(mode: StartMode, environment: &Environment) -> Result { + create_app::(mode, environment).await + } + + async fn initializers(_ctx: &AppContext) -> Result>> { + Ok(vec![Box::new( + initializers::view_engine::ViewEngineInitializer, + )]) + } + + fn routes(_ctx: &AppContext) -> AppRoutes { + AppRoutes::with_default_routes() // controller routes below + .add_route(controllers::auth::routes()) + } + async fn connect_workers(ctx: &AppContext, queue: &Queue) -> Result<()> { + queue.register(DownloadWorker::build(ctx)).await?; + Ok(()) + } + fn register_tasks(tasks: &mut Tasks) { + tasks.register(tasks::seed::SeedData); + // tasks-inject (do not remove) + } + async fn truncate(db: &DatabaseConnection) -> Result<()> { + truncate_table(db, users::Entity).await?; + Ok(()) + } + + async fn seed(db: &DatabaseConnection, base: &Path) -> Result<()> { + db::seed::(db, &base.join("users.yaml").display().to_string()).await?; + Ok(()) + } +} diff --git a/src/bin/main.rs b/src/bin/main.rs new file mode 100644 index 0000000..6d8dbfe --- /dev/null +++ b/src/bin/main.rs @@ -0,0 +1,8 @@ +use loco_rs::cli; +use migration::Migrator; +use thoth::app::App; + +#[tokio::main] +async fn main() -> loco_rs::Result<()> { + cli::main::().await +} diff --git a/src/controllers/auth.rs b/src/controllers/auth.rs new file mode 100644 index 0000000..27e3de7 --- /dev/null +++ b/src/controllers/auth.rs @@ -0,0 +1,157 @@ +use axum::debug_handler; +use loco_rs::prelude::*; +use serde::{Deserialize, Serialize}; + +use crate::{ + mailers::auth::AuthMailer, + models::{ + _entities::users, + users::{LoginParams, RegisterParams}, + }, + views::auth::{CurrentResponse, LoginResponse}, +}; +#[derive(Debug, Deserialize, Serialize)] +pub struct VerifyParams { + pub token: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct ForgotParams { + pub email: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct ResetParams { + pub token: String, + pub password: String, +} + +/// Register function creates a new user with the given parameters and sends a +/// welcome email to the user +#[debug_handler] +async fn register( + State(ctx): State, + Json(params): Json, +) -> Result { + let res = users::Model::create_with_password(&ctx.db, ¶ms).await; + + let user = match res { + Ok(user) => user, + Err(err) => { + tracing::info!( + message = err.to_string(), + user_email = ¶ms.email, + "could not register user", + ); + return format::json(()); + } + }; + + let user = user + .into_active_model() + .set_email_verification_sent(&ctx.db) + .await?; + + AuthMailer::send_welcome(&ctx, &user).await?; + + format::json(()) +} + +/// Verify register user. if the user not verified his email, he can't login to +/// the system. +#[debug_handler] +async fn verify( + State(ctx): State, + Json(params): Json, +) -> Result { + let user = users::Model::find_by_verification_token(&ctx.db, ¶ms.token).await?; + + if user.email_verified_at.is_some() { + tracing::info!(pid = user.pid.to_string(), "user already verified"); + } else { + let active_model = user.into_active_model(); + let user = active_model.verified(&ctx.db).await?; + tracing::info!(pid = user.pid.to_string(), "user verified"); + } + + format::json(()) +} + +/// In case the user forgot his password this endpoints generate a forgot token +/// and send email to the user. In case the email not found in our DB, we are +/// returning a valid request for for security reasons (not exposing users DB +/// list). +#[debug_handler] +async fn forgot( + State(ctx): State, + Json(params): Json, +) -> Result { + let Ok(user) = users::Model::find_by_email(&ctx.db, ¶ms.email).await else { + // we don't want to expose our users email. if the email is invalid we still + // returning success to the caller + return format::json(()); + }; + + let user = user + .into_active_model() + .set_forgot_password_sent(&ctx.db) + .await?; + + AuthMailer::forgot_password(&ctx, &user).await?; + + format::json(()) +} + +/// reset user password by the given parameters +#[debug_handler] +async fn reset(State(ctx): State, Json(params): Json) -> Result { + let Ok(user) = users::Model::find_by_reset_token(&ctx.db, ¶ms.token).await else { + // we don't want to expose our users email. if the email is invalid we still + // returning success to the caller + tracing::info!("reset token not found"); + + return format::json(()); + }; + user.into_active_model() + .reset_password(&ctx.db, ¶ms.password) + .await?; + + format::json(()) +} + +/// Creates a user login and returns a token +#[debug_handler] +async fn login(State(ctx): State, Json(params): Json) -> Result { + let user = users::Model::find_by_email(&ctx.db, ¶ms.email).await?; + + let valid = user.verify_password(¶ms.password); + + if !valid { + return unauthorized("unauthorized!"); + } + + let jwt_secret = ctx.config.get_jwt_config()?; + + let token = user + .generate_jwt(&jwt_secret.secret, &jwt_secret.expiration) + .or_else(|_| unauthorized("unauthorized!"))?; + + format::json(LoginResponse::new(&user, &token)) +} + +#[debug_handler] +async fn current(auth: auth::JWT, State(ctx): State) -> Result { + let user = users::Model::find_by_pid(&ctx.db, &auth.claims.pid).await?; + format::json(CurrentResponse::new(&user)) +} + +pub fn routes() -> Routes { + Routes::new() + .prefix("/api/auth") + .add("/register", post(register)) + .add("/verify", post(verify)) + .add("/login", post(login)) + .add("/forgot", post(forgot)) + .add("/reset", post(reset)) + .add("/current", get(current)) +} diff --git a/src/controllers/mod.rs b/src/controllers/mod.rs new file mode 100644 index 0000000..0e4a05d --- /dev/null +++ b/src/controllers/mod.rs @@ -0,0 +1 @@ +pub mod auth; diff --git a/src/fixtures/users.yaml b/src/fixtures/users.yaml new file mode 100644 index 0000000..8f5b5ed --- /dev/null +++ b/src/fixtures/users.yaml @@ -0,0 +1,17 @@ +--- +- id: 1 + pid: 11111111-1111-1111-1111-111111111111 + email: user1@example.com + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc" + api_key: lo-95ec80d7-cb60-4b70-9b4b-9ef74cb88758 + name: user1 + created_at: "2023-11-12T12:34:56.789Z" + updated_at: "2023-11-12T12:34:56.789Z" +- id: 2 + pid: 22222222-2222-2222-2222-222222222222 + email: user2@example.com + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc" + api_key: lo-153561ca-fa84-4e1b-813a-c62526d0a77e + name: user2 + created_at: "2023-11-12T12:34:56.789Z" + updated_at: "2023-11-12T12:34:56.789Z" diff --git a/src/initializers/mod.rs b/src/initializers/mod.rs new file mode 100644 index 0000000..cbe3470 --- /dev/null +++ b/src/initializers/mod.rs @@ -0,0 +1 @@ +pub mod view_engine; diff --git a/src/initializers/view_engine.rs b/src/initializers/view_engine.rs new file mode 100644 index 0000000..397a21a --- /dev/null +++ b/src/initializers/view_engine.rs @@ -0,0 +1,46 @@ +use axum::{async_trait, Extension, Router as AxumRouter}; +use fluent_templates::{ArcLoader, FluentLoader}; +use loco_rs::{ + app::{AppContext, Initializer}, + controller::views::{engines, ViewEngine}, + Error, Result, +}; +use tracing::info; + +const I18N_DIR: &str = "assets/i18n"; +const I18N_SHARED: &str = "assets/i18n/shared.ftl"; +#[allow(clippy::module_name_repetitions)] +pub struct ViewEngineInitializer; + +#[async_trait] +impl Initializer for ViewEngineInitializer { + fn name(&self) -> String { + "view-engine".to_string() + } + + async fn after_routes(&self, router: AxumRouter, _ctx: &AppContext) -> Result { + #[allow(unused_mut)] + let mut tera_engine = engines::TeraView::build()?; + if std::path::Path::new(I18N_DIR).exists() { + let arc = ArcLoader::builder(&I18N_DIR, unic_langid::langid!("en-US")) + .shared_resources(Some(&[I18N_SHARED.into()])) + .customize(|bundle| bundle.set_use_isolating(false)) + .build() + .map_err(|e| Error::string(&e.to_string()))?; + #[cfg(debug_assertions)] + tera_engine + .tera + .lock() + .expect("lock") + .register_function("t", FluentLoader::new(arc)); + + #[cfg(not(debug_assertions))] + tera_engine + .tera + .register_function("t", FluentLoader::new(arc)); + info!("locales loaded"); + } + + Ok(router.layer(Extension(ViewEngine::from(tera_engine)))) + } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..dc3ea76 --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,8 @@ +pub mod app; +pub mod controllers; +pub mod initializers; +pub mod mailers; +pub mod models; +pub mod tasks; +pub mod views; +pub mod workers; diff --git a/src/mailers/auth.rs b/src/mailers/auth.rs new file mode 100644 index 0000000..30bb1bf --- /dev/null +++ b/src/mailers/auth.rs @@ -0,0 +1,65 @@ +// auth mailer +#![allow(non_upper_case_globals)] + +use loco_rs::prelude::*; +use serde_json::json; + +use crate::models::users; + +static welcome: Dir<'_> = include_dir!("src/mailers/auth/welcome"); +static forgot: Dir<'_> = include_dir!("src/mailers/auth/forgot"); +// #[derive(Mailer)] // -- disabled for faster build speed. it works. but lets +// move on for now. + +#[allow(clippy::module_name_repetitions)] +pub struct AuthMailer {} +impl Mailer for AuthMailer {} +impl AuthMailer { + /// Sending welcome email the the given user + /// + /// # Errors + /// + /// When email sending is failed + pub async fn send_welcome(ctx: &AppContext, user: &users::Model) -> Result<()> { + Self::mail_template( + ctx, + &welcome, + mailer::Args { + to: user.email.to_string(), + locals: json!({ + "name": user.name, + "verifyToken": user.email_verification_token, + "domain": ctx.config.server.full_url() + }), + ..Default::default() + }, + ) + .await?; + + Ok(()) + } + + /// Sending forgot password email + /// + /// # Errors + /// + /// When email sending is failed + pub async fn forgot_password(ctx: &AppContext, user: &users::Model) -> Result<()> { + Self::mail_template( + ctx, + &forgot, + mailer::Args { + to: user.email.to_string(), + locals: json!({ + "name": user.name, + "resetToken": user.reset_token, + "domain": ctx.config.server.full_url() + }), + ..Default::default() + }, + ) + .await?; + + Ok(()) + } +} diff --git a/src/mailers/auth/forgot/html.t b/src/mailers/auth/forgot/html.t new file mode 100644 index 0000000..221dd60 --- /dev/null +++ b/src/mailers/auth/forgot/html.t @@ -0,0 +1,11 @@ +; + + + Hey {{name}}, + Forgot your password? No worries! You can reset it by clicking the link below: + Reset Your Password + If you didn't request a password reset, please ignore this email. + Best regards,
    The Loco Team
    + + + diff --git a/src/mailers/auth/forgot/subject.t b/src/mailers/auth/forgot/subject.t new file mode 100644 index 0000000..4938df1 --- /dev/null +++ b/src/mailers/auth/forgot/subject.t @@ -0,0 +1 @@ +Your reset password link diff --git a/src/mailers/auth/forgot/text.t b/src/mailers/auth/forgot/text.t new file mode 100644 index 0000000..58c30fd --- /dev/null +++ b/src/mailers/auth/forgot/text.t @@ -0,0 +1,3 @@ +Reset your password with this link: + +http://localhost/reset#{{resetToken}} diff --git a/src/mailers/auth/welcome/html.t b/src/mailers/auth/welcome/html.t new file mode 100644 index 0000000..ae4c41c --- /dev/null +++ b/src/mailers/auth/welcome/html.t @@ -0,0 +1,13 @@ +; + + + Dear {{name}}, + Welcome to Loco! You can now log in to your account. + Before you get started, please verify your account by clicking the link below: + + Verify Your Account + +

    Best regards,
    The Loco Team

    + + + diff --git a/src/mailers/auth/welcome/subject.t b/src/mailers/auth/welcome/subject.t new file mode 100644 index 0000000..82cc6fb --- /dev/null +++ b/src/mailers/auth/welcome/subject.t @@ -0,0 +1 @@ +Welcome {{name}} diff --git a/src/mailers/auth/welcome/text.t b/src/mailers/auth/welcome/text.t new file mode 100644 index 0000000..63beefd --- /dev/null +++ b/src/mailers/auth/welcome/text.t @@ -0,0 +1,4 @@ +Welcome {{name}}, you can now log in. + Verify your account with the link below: + + http://localhost/verify#{{verifyToken}} diff --git a/src/mailers/mod.rs b/src/mailers/mod.rs new file mode 100644 index 0000000..0e4a05d --- /dev/null +++ b/src/mailers/mod.rs @@ -0,0 +1 @@ +pub mod auth; diff --git a/src/models/_entities/mod.rs b/src/models/_entities/mod.rs new file mode 100644 index 0000000..095dade --- /dev/null +++ b/src/models/_entities/mod.rs @@ -0,0 +1,5 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 + +pub mod prelude; + +pub mod users; diff --git a/src/models/_entities/prelude.rs b/src/models/_entities/prelude.rs new file mode 100644 index 0000000..4036ade --- /dev/null +++ b/src/models/_entities/prelude.rs @@ -0,0 +1,3 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 + +pub use super::users::Entity as Users; diff --git a/src/models/_entities/users.rs b/src/models/_entities/users.rs new file mode 100644 index 0000000..120b1a1 --- /dev/null +++ b/src/models/_entities/users.rs @@ -0,0 +1,28 @@ +//! `SeaORM` Entity, @generated by sea-orm-codegen 1.0.0 + +use sea_orm::entity::prelude::*; +use serde::{Deserialize, Serialize}; + +#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq, Serialize, Deserialize)] +#[sea_orm(table_name = "users")] +pub struct Model { + pub created_at: DateTimeWithTimeZone, + pub updated_at: DateTimeWithTimeZone, + #[sea_orm(primary_key)] + pub id: i32, + pub pid: Uuid, + #[sea_orm(unique)] + pub email: String, + pub password: String, + #[sea_orm(unique)] + pub api_key: String, + pub name: String, + pub reset_token: Option, + pub reset_sent_at: Option, + pub email_verification_token: Option, + pub email_verification_sent_at: Option, + pub email_verified_at: Option, +} + +#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)] +pub enum Relation {} diff --git a/src/models/mod.rs b/src/models/mod.rs new file mode 100644 index 0000000..48da463 --- /dev/null +++ b/src/models/mod.rs @@ -0,0 +1,2 @@ +pub mod _entities; +pub mod users; diff --git a/src/models/users.rs b/src/models/users.rs new file mode 100644 index 0000000..b4f3aae --- /dev/null +++ b/src/models/users.rs @@ -0,0 +1,298 @@ +use async_trait::async_trait; +use chrono::offset::Local; +use loco_rs::{auth::jwt, hash, prelude::*}; +use serde::{Deserialize, Serialize}; +use uuid::Uuid; + +pub use super::_entities::users::{self, ActiveModel, Entity, Model}; + +#[derive(Debug, Deserialize, Serialize)] +pub struct LoginParams { + pub email: String, + pub password: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct RegisterParams { + pub email: String, + pub password: String, + pub name: String, +} + +#[derive(Debug, Validate, Deserialize)] +pub struct Validator { + #[validate(length(min = 2, message = "Name must be at least 2 characters long."))] + pub name: String, + #[validate(custom(function = "validation::is_valid_email"))] + pub email: String, +} + +impl Validatable for super::_entities::users::ActiveModel { + fn validator(&self) -> Box { + Box::new(Validator { + name: self.name.as_ref().to_owned(), + email: self.email.as_ref().to_owned(), + }) + } +} + +#[async_trait::async_trait] +impl ActiveModelBehavior for super::_entities::users::ActiveModel { + async fn before_save(self, _db: &C, insert: bool) -> Result + where + C: ConnectionTrait, + { + self.validate()?; + if insert { + let mut this = self; + this.pid = ActiveValue::Set(Uuid::new_v4()); + this.api_key = ActiveValue::Set(format!("lo-{}", Uuid::new_v4())); + Ok(this) + } else { + Ok(self) + } + } +} + +#[async_trait] +impl Authenticable for super::_entities::users::Model { + async fn find_by_api_key(db: &DatabaseConnection, api_key: &str) -> ModelResult { + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::ApiKey, api_key) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + async fn find_by_claims_key(db: &DatabaseConnection, claims_key: &str) -> ModelResult { + Self::find_by_pid(db, claims_key).await + } +} + +impl super::_entities::users::Model { + /// finds a user by the provided email + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_email(db: &DatabaseConnection, email: &str) -> ModelResult { + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::Email, email) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided verification token + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_verification_token( + db: &DatabaseConnection, + token: &str, + ) -> ModelResult { + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::EmailVerificationToken, token) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided reset token + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_reset_token(db: &DatabaseConnection, token: &str) -> ModelResult { + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::ResetToken, token) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided pid + /// + /// # Errors + /// + /// When could not find user or DB query error + pub async fn find_by_pid(db: &DatabaseConnection, pid: &str) -> ModelResult { + let parse_uuid = Uuid::parse_str(pid).map_err(|e| ModelError::Any(e.into()))?; + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::Pid, parse_uuid) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// finds a user by the provided api key + /// + /// # Errors + /// + /// When could not find user by the given token or DB query error + pub async fn find_by_api_key(db: &DatabaseConnection, api_key: &str) -> ModelResult { + let user = users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::ApiKey, api_key) + .build(), + ) + .one(db) + .await?; + user.ok_or_else(|| ModelError::EntityNotFound) + } + + /// Verifies whether the provided plain password matches the hashed password + /// + /// # Errors + /// + /// when could not verify password + #[must_use] + pub fn verify_password(&self, password: &str) -> bool { + hash::verify_password(password, &self.password) + } + + /// Asynchronously creates a user with a password and saves it to the + /// database. + /// + /// # Errors + /// + /// When could not save the user into the DB + pub async fn create_with_password( + db: &DatabaseConnection, + params: &RegisterParams, + ) -> ModelResult { + let txn = db.begin().await?; + + if users::Entity::find() + .filter( + model::query::condition() + .eq(users::Column::Email, ¶ms.email) + .build(), + ) + .one(&txn) + .await? + .is_some() + { + return Err(ModelError::EntityAlreadyExists {}); + } + + let password_hash = + hash::hash_password(¶ms.password).map_err(|e| ModelError::Any(e.into()))?; + let user = users::ActiveModel { + email: ActiveValue::set(params.email.to_string()), + password: ActiveValue::set(password_hash), + name: ActiveValue::set(params.name.to_string()), + ..Default::default() + } + .insert(&txn) + .await?; + + txn.commit().await?; + + Ok(user) + } + + /// Creates a JWT + /// + /// # Errors + /// + /// when could not convert user claims to jwt token + pub fn generate_jwt(&self, secret: &str, expiration: &u64) -> ModelResult { + Ok(jwt::JWT::new(secret).generate_token(expiration, self.pid.to_string(), None)?) + } +} + +impl super::_entities::users::ActiveModel { + /// Sets the email verification information for the user and + /// updates it in the database. + /// + /// This method is used to record the timestamp when the email verification + /// was sent and generate a unique verification token for the user. + /// + /// # Errors + /// + /// when has DB query error + pub async fn set_email_verification_sent( + mut self, + db: &DatabaseConnection, + ) -> ModelResult { + self.email_verification_sent_at = ActiveValue::set(Some(Local::now().into())); + self.email_verification_token = ActiveValue::Set(Some(Uuid::new_v4().to_string())); + Ok(self.update(db).await?) + } + + /// Sets the information for a reset password request, + /// generates a unique reset password token, and updates it in the + /// database. + /// + /// This method records the timestamp when the reset password token is sent + /// and generates a unique token for the user. + /// + /// # Arguments + /// + /// # Errors + /// + /// when has DB query error + pub async fn set_forgot_password_sent(mut self, db: &DatabaseConnection) -> ModelResult { + self.reset_sent_at = ActiveValue::set(Some(Local::now().into())); + self.reset_token = ActiveValue::Set(Some(Uuid::new_v4().to_string())); + Ok(self.update(db).await?) + } + + /// Records the verification time when a user verifies their + /// email and updates it in the database. + /// + /// This method sets the timestamp when the user successfully verifies their + /// email. + /// + /// # Errors + /// + /// when has DB query error + pub async fn verified(mut self, db: &DatabaseConnection) -> ModelResult { + self.email_verified_at = ActiveValue::set(Some(Local::now().into())); + Ok(self.update(db).await?) + } + + /// Resets the current user password with a new password and + /// updates it in the database. + /// + /// This method hashes the provided password and sets it as the new password + /// for the user. + /// + /// # Errors + /// + /// when has DB query error or could not hashed the given password + pub async fn reset_password( + mut self, + db: &DatabaseConnection, + password: &str, + ) -> ModelResult { + self.password = + ActiveValue::set(hash::hash_password(password).map_err(|e| ModelError::Any(e.into()))?); + self.reset_token = ActiveValue::Set(None); + self.reset_sent_at = ActiveValue::Set(None); + Ok(self.update(db).await?) + } +} diff --git a/src/tasks/mod.rs b/src/tasks/mod.rs new file mode 100644 index 0000000..01fbdda --- /dev/null +++ b/src/tasks/mod.rs @@ -0,0 +1 @@ +pub mod seed; diff --git a/src/tasks/seed.rs b/src/tasks/seed.rs new file mode 100644 index 0000000..1647beb --- /dev/null +++ b/src/tasks/seed.rs @@ -0,0 +1,45 @@ +//! This task implements data seeding functionality for initializing new +//! development/demo environments. +//! +//! # Example +//! +//! Run the task with the following command: +//! ```sh +//! cargo run task +//! ``` +//! +//! To override existing data and reset the data structure, use the following +//! command with the `refresh:true` argument: +//! ```sh +//! cargo run task seed_data refresh:true +//! ``` + +use loco_rs::{db, prelude::*}; +use migration::Migrator; + +use crate::app::App; + +#[allow(clippy::module_name_repetitions)] +pub struct SeedData; +#[async_trait] +impl Task for SeedData { + fn task(&self) -> TaskInfo { + TaskInfo { + name: "seed_data".to_string(), + detail: "Task for seeding data".to_string(), + } + } + + async fn run(&self, app_context: &AppContext, vars: &task::Vars) -> Result<()> { + let refresh = vars + .cli_arg("refresh") + .is_ok_and(|refresh| refresh == "true"); + + if refresh { + db::reset::(&app_context.db).await?; + } + let path = std::path::Path::new("src/fixtures"); + db::run_app_seed::(&app_context.db, path).await?; + Ok(()) + } +} diff --git a/src/views/auth.rs b/src/views/auth.rs new file mode 100644 index 0000000..3d2d74f --- /dev/null +++ b/src/views/auth.rs @@ -0,0 +1,41 @@ +use serde::{Deserialize, Serialize}; + +use crate::models::_entities::users; + +#[derive(Debug, Deserialize, Serialize)] +pub struct LoginResponse { + pub token: String, + pub pid: String, + pub name: String, + pub is_verified: bool, +} + +impl LoginResponse { + #[must_use] + pub fn new(user: &users::Model, token: &String) -> Self { + Self { + token: token.to_string(), + pid: user.pid.to_string(), + name: user.name.clone(), + is_verified: user.email_verified_at.is_some(), + } + } +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct CurrentResponse { + pub pid: String, + pub name: String, + pub email: String, +} + +impl CurrentResponse { + #[must_use] + pub fn new(user: &users::Model) -> Self { + Self { + pid: user.pid.to_string(), + name: user.name.clone(), + email: user.email.clone(), + } + } +} diff --git a/src/views/mod.rs b/src/views/mod.rs new file mode 100644 index 0000000..0e4a05d --- /dev/null +++ b/src/views/mod.rs @@ -0,0 +1 @@ +pub mod auth; diff --git a/src/workers/downloader.rs b/src/workers/downloader.rs new file mode 100644 index 0000000..1abafa4 --- /dev/null +++ b/src/workers/downloader.rs @@ -0,0 +1,23 @@ +use loco_rs::prelude::*; +use serde::{Deserialize, Serialize}; + +pub struct DownloadWorker { + pub ctx: AppContext, +} + +#[derive(Deserialize, Debug, Serialize)] +pub struct DownloadWorkerArgs { + pub user_guid: String, +} + +#[async_trait] +impl BackgroundWorker for DownloadWorker { + fn build(ctx: &AppContext) -> Self { + Self { ctx: ctx.clone() } + } + async fn perform(&self, _args: DownloadWorkerArgs) -> Result<()> { + // TODO: Some actual work goes here... + + Ok(()) + } +} diff --git a/src/workers/mod.rs b/src/workers/mod.rs new file mode 100644 index 0000000..acb5733 --- /dev/null +++ b/src/workers/mod.rs @@ -0,0 +1 @@ +pub mod downloader; diff --git a/tests/mod.rs b/tests/mod.rs new file mode 100644 index 0000000..b42f234 --- /dev/null +++ b/tests/mod.rs @@ -0,0 +1,4 @@ +mod models; +mod requests; +mod tasks; +mod workers; diff --git a/tests/models/mod.rs b/tests/models/mod.rs new file mode 100644 index 0000000..5975988 --- /dev/null +++ b/tests/models/mod.rs @@ -0,0 +1 @@ +mod users; diff --git a/tests/models/snapshots/can_create_with_password@users.snap b/tests/models/snapshots/can_create_with_password@users.snap new file mode 100644 index 0000000..6e66fd3 --- /dev/null +++ b/tests/models/snapshots/can_create_with_password@users.snap @@ -0,0 +1,21 @@ +--- +source: tests/models/users.rs +expression: res +--- +Ok( + Model { + created_at: DATE, + updated_at: DATE, + id: ID + pid: PID, + email: "test@framework.com", + password: "PASSWORD", + api_key: "lo-PID", + name: "framework", + reset_token: None, + reset_sent_at: None, + email_verification_token: None, + email_verification_sent_at: None, + email_verified_at: None, + }, +) diff --git a/tests/models/snapshots/can_find_by_email@users-2.snap b/tests/models/snapshots/can_find_by_email@users-2.snap new file mode 100644 index 0000000..25c700a --- /dev/null +++ b/tests/models/snapshots/can_find_by_email@users-2.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/users.rs +expression: non_existing_user_results +--- +Err( + EntityNotFound, +) diff --git a/tests/models/snapshots/can_find_by_email@users.snap b/tests/models/snapshots/can_find_by_email@users.snap new file mode 100644 index 0000000..067d0e7 --- /dev/null +++ b/tests/models/snapshots/can_find_by_email@users.snap @@ -0,0 +1,21 @@ +--- +source: tests/models/users.rs +expression: existing_user +--- +Ok( + Model { + created_at: 2023-11-12T12:34:56.789+00:00, + updated_at: 2023-11-12T12:34:56.789+00:00, + id: 1, + pid: 11111111-1111-1111-1111-111111111111, + email: "user1@example.com", + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc", + api_key: "lo-95ec80d7-cb60-4b70-9b4b-9ef74cb88758", + name: "user1", + reset_token: None, + reset_sent_at: None, + email_verification_token: None, + email_verification_sent_at: None, + email_verified_at: None, + }, +) diff --git a/tests/models/snapshots/can_find_by_pid@users-2.snap b/tests/models/snapshots/can_find_by_pid@users-2.snap new file mode 100644 index 0000000..25c700a --- /dev/null +++ b/tests/models/snapshots/can_find_by_pid@users-2.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/users.rs +expression: non_existing_user_results +--- +Err( + EntityNotFound, +) diff --git a/tests/models/snapshots/can_find_by_pid@users.snap b/tests/models/snapshots/can_find_by_pid@users.snap new file mode 100644 index 0000000..067d0e7 --- /dev/null +++ b/tests/models/snapshots/can_find_by_pid@users.snap @@ -0,0 +1,21 @@ +--- +source: tests/models/users.rs +expression: existing_user +--- +Ok( + Model { + created_at: 2023-11-12T12:34:56.789+00:00, + updated_at: 2023-11-12T12:34:56.789+00:00, + id: 1, + pid: 11111111-1111-1111-1111-111111111111, + email: "user1@example.com", + password: "$argon2id$v=19$m=19456,t=2,p=1$ETQBx4rTgNAZhSaeYZKOZg$eYTdH26CRT6nUJtacLDEboP0li6xUwUF/q5nSlQ8uuc", + api_key: "lo-95ec80d7-cb60-4b70-9b4b-9ef74cb88758", + name: "user1", + reset_token: None, + reset_sent_at: None, + email_verification_token: None, + email_verification_sent_at: None, + email_verified_at: None, + }, +) diff --git a/tests/models/snapshots/can_validate_model@users.snap b/tests/models/snapshots/can_validate_model@users.snap new file mode 100644 index 0000000..708479a --- /dev/null +++ b/tests/models/snapshots/can_validate_model@users.snap @@ -0,0 +1,9 @@ +--- +source: tests/models/users.rs +expression: res +--- +Err( + Custom( + "{\"email\":[{\"code\":\"invalid email\",\"message\":null}],\"name\":[{\"code\":\"length\",\"message\":\"Name must be at least 2 characters long.\"}]}", + ), +) diff --git a/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap b/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap new file mode 100644 index 0000000..ff28ea1 --- /dev/null +++ b/tests/models/snapshots/handle_create_with_password_with_duplicate@users.snap @@ -0,0 +1,7 @@ +--- +source: tests/models/users.rs +expression: new_user +--- +Err( + EntityAlreadyExists, +) diff --git a/tests/models/users.rs b/tests/models/users.rs new file mode 100644 index 0000000..cebc3f8 --- /dev/null +++ b/tests/models/users.rs @@ -0,0 +1,223 @@ +use insta::assert_debug_snapshot; +use loco_rs::{model::ModelError, testing}; +use sea_orm::{ActiveModelTrait, ActiveValue, IntoActiveModel}; +use serial_test::serial; +use thoth::{ + app::App, + models::users::{self, Model, RegisterParams}, +}; + +macro_rules! configure_insta { + ($($expr:expr),*) => { + let mut settings = insta::Settings::clone_current(); + settings.set_prepend_module_to_snapshot(false); + settings.set_snapshot_suffix("users"); + let _guard = settings.bind_to_scope(); + }; +} + +#[tokio::test] +#[serial] +async fn test_can_validate_model() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + + let res = users::ActiveModel { + name: ActiveValue::set("1".to_string()), + email: ActiveValue::set("invalid-email".to_string()), + ..Default::default() + } + .insert(&boot.app_context.db) + .await; + + assert_debug_snapshot!(res); +} + +#[tokio::test] +#[serial] +async fn can_create_with_password() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + + let params = RegisterParams { + email: "test@framework.com".to_string(), + password: "1234".to_string(), + name: "framework".to_string(), + }; + let res = Model::create_with_password(&boot.app_context.db, ¶ms).await; + + insta::with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!(res); + }); +} + +#[tokio::test] +#[serial] +async fn handle_create_with_password_with_duplicate() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let new_user: Result = Model::create_with_password( + &boot.app_context.db, + &RegisterParams { + email: "user1@example.com".to_string(), + password: "1234".to_string(), + name: "framework".to_string(), + }, + ) + .await; + assert_debug_snapshot!(new_user); +} + +#[tokio::test] +#[serial] +async fn can_find_by_email() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let existing_user = Model::find_by_email(&boot.app_context.db, "user1@example.com").await; + let non_existing_user_results = + Model::find_by_email(&boot.app_context.db, "un@existing-email.com").await; + + assert_debug_snapshot!(existing_user); + assert_debug_snapshot!(non_existing_user_results); +} + +#[tokio::test] +#[serial] +async fn can_find_by_pid() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let existing_user = + Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111").await; + let non_existing_user_results = + Model::find_by_pid(&boot.app_context.db, "23232323-2323-2323-2323-232323232323").await; + + assert_debug_snapshot!(existing_user); + assert_debug_snapshot!(non_existing_user_results); +} + +#[tokio::test] +#[serial] +async fn can_verification_token() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verification_sent_at.is_none()); + assert!(user.email_verification_token.is_none()); + + assert!(user + .into_active_model() + .set_email_verification_sent(&boot.app_context.db) + .await + .is_ok()); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verification_sent_at.is_some()); + assert!(user.email_verification_token.is_some()); +} + +#[tokio::test] +#[serial] +async fn can_set_forgot_password_sent() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.reset_sent_at.is_none()); + assert!(user.reset_token.is_none()); + + assert!(user + .into_active_model() + .set_forgot_password_sent(&boot.app_context.db) + .await + .is_ok()); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.reset_sent_at.is_some()); + assert!(user.reset_token.is_some()); +} + +#[tokio::test] +#[serial] +async fn can_verified() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verified_at.is_none()); + + assert!(user + .into_active_model() + .verified(&boot.app_context.db) + .await + .is_ok()); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.email_verified_at.is_some()); +} + +#[tokio::test] +#[serial] +async fn can_reset_password() { + configure_insta!(); + + let boot = testing::boot_test::().await.unwrap(); + testing::seed::(&boot.app_context.db).await.unwrap(); + + let user = Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap(); + + assert!(user.verify_password("12341234")); + + assert!(user + .clone() + .into_active_model() + .reset_password(&boot.app_context.db, "new-password") + .await + .is_ok()); + + assert!( + Model::find_by_pid(&boot.app_context.db, "11111111-1111-1111-1111-111111111111") + .await + .unwrap() + .verify_password("new-password") + ); +} diff --git a/tests/requests/auth.rs b/tests/requests/auth.rs new file mode 100644 index 0000000..2a74468 --- /dev/null +++ b/tests/requests/auth.rs @@ -0,0 +1,218 @@ +use insta::{assert_debug_snapshot, with_settings}; +use loco_rs::testing; +use rstest::rstest; +use serial_test::serial; +use thoth::{app::App, models::users}; + +use super::prepare_data; + +// TODO: see how to dedup / extract this to app-local test utils +// not to framework, because that would require a runtime dep on insta +macro_rules! configure_insta { + ($($expr:expr),*) => { + let mut settings = insta::Settings::clone_current(); + settings.set_prepend_module_to_snapshot(false); + settings.set_snapshot_suffix("auth_request"); + let _guard = settings.bind_to_scope(); + }; +} + +#[tokio::test] +#[serial] +async fn can_register() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let email = "test@loco.com"; + let payload = serde_json::json!({ + "name": "loco", + "email": email, + "password": "12341234" + }); + + let _response = request.post("/api/auth/register").json(&payload).await; + let saved_user = users::Model::find_by_email(&ctx.db, email).await; + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!(saved_user); + }); + + with_settings!({ + filters => testing::cleanup_email() + }, { + assert_debug_snapshot!(ctx.mailer.unwrap().deliveries()); + }); + }) + .await; +} + +#[rstest] +#[case("login_with_valid_password", "12341234")] +#[case("login_with_invalid_password", "invalid-password")] +#[tokio::test] +#[serial] +async fn can_login_with_verify(#[case] test_name: &str, #[case] password: &str) { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let email = "test@loco.com"; + let register_payload = serde_json::json!({ + "name": "loco", + "email": email, + "password": "12341234" + }); + + //Creating a new user + _ = request + .post("/api/auth/register") + .json(®ister_payload) + .await; + + let user = users::Model::find_by_email(&ctx.db, email).await.unwrap(); + let verify_payload = serde_json::json!({ + "token": user.email_verification_token, + }); + request.post("/api/auth/verify").json(&verify_payload).await; + + //verify user request + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": email, + "password": password + })) + .await; + + // Make sure email_verified_at is set + assert!(users::Model::find_by_email(&ctx.db, email) + .await + .unwrap() + .email_verified_at + .is_some()); + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!(test_name, (response.status_code(), response.text())); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_login_without_verify() { + configure_insta!(); + + testing::request::(|request, _ctx| async move { + let email = "test@loco.com"; + let password = "12341234"; + let register_payload = serde_json::json!({ + "name": "loco", + "email": email, + "password": password + }); + + //Creating a new user + _ = request + .post("/api/auth/register") + .json(®ister_payload) + .await; + + //verify user request + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": email, + "password": password + })) + .await; + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!((response.status_code(), response.text())); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_reset_password() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let login_data = prepare_data::init_user_login(&request, &ctx).await; + + let forgot_payload = serde_json::json!({ + "email": login_data.user.email, + }); + _ = request.post("/api/auth/forgot").json(&forgot_payload).await; + + let user = users::Model::find_by_email(&ctx.db, &login_data.user.email) + .await + .unwrap(); + assert!(user.reset_token.is_some()); + assert!(user.reset_sent_at.is_some()); + + let new_password = "new-password"; + let reset_payload = serde_json::json!({ + "token": user.reset_token, + "password": new_password, + }); + + let reset_response = request.post("/api/auth/reset").json(&reset_payload).await; + + let user = users::Model::find_by_email(&ctx.db, &user.email) + .await + .unwrap(); + + assert!(user.reset_token.is_none()); + assert!(user.reset_sent_at.is_none()); + + assert_debug_snapshot!((reset_response.status_code(), reset_response.text())); + + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": user.email, + "password": new_password + })) + .await; + + assert_eq!(response.status_code(), 200); + + with_settings!({ + filters => testing::cleanup_email() + }, { + assert_debug_snapshot!(ctx.mailer.unwrap().deliveries()); + }); + }) + .await; +} + +#[tokio::test] +#[serial] +async fn can_get_current_user() { + configure_insta!(); + + testing::request::(|request, ctx| async move { + let user = prepare_data::init_user_login(&request, &ctx).await; + + let (auth_key, auth_value) = prepare_data::auth_header(&user.token); + let response = request + .get("/api/auth/current") + .add_header(auth_key, auth_value) + .await; + + with_settings!({ + filters => testing::cleanup_user_model() + }, { + assert_debug_snapshot!((response.status_code(), response.text())); + }); + }) + .await; +} diff --git a/tests/requests/mod.rs b/tests/requests/mod.rs new file mode 100644 index 0000000..887b7ce --- /dev/null +++ b/tests/requests/mod.rs @@ -0,0 +1,2 @@ +mod auth; +mod prepare_data; diff --git a/tests/requests/prepare_data.rs b/tests/requests/prepare_data.rs new file mode 100644 index 0000000..028cbb9 --- /dev/null +++ b/tests/requests/prepare_data.rs @@ -0,0 +1,57 @@ +use axum::http::{HeaderName, HeaderValue}; +use loco_rs::{app::AppContext, TestServer}; +use thoth::{models::users, views::auth::LoginResponse}; + +const USER_EMAIL: &str = "test@loco.com"; +const USER_PASSWORD: &str = "1234"; + +pub struct LoggedInUser { + pub user: users::Model, + pub token: String, +} + +pub async fn init_user_login(request: &TestServer, ctx: &AppContext) -> LoggedInUser { + let register_payload = serde_json::json!({ + "name": "loco", + "email": USER_EMAIL, + "password": USER_PASSWORD + }); + + //Creating a new user + request + .post("/api/auth/register") + .json(®ister_payload) + .await; + let user = users::Model::find_by_email(&ctx.db, USER_EMAIL) + .await + .unwrap(); + + let verify_payload = serde_json::json!({ + "token": user.email_verification_token, + }); + + request.post("/api/auth/verify").json(&verify_payload).await; + + let response = request + .post("/api/auth/login") + .json(&serde_json::json!({ + "email": USER_EMAIL, + "password": USER_PASSWORD + })) + .await; + + let login_response: LoginResponse = serde_json::from_str(&response.text()).unwrap(); + + LoggedInUser { + user: users::Model::find_by_email(&ctx.db, USER_EMAIL) + .await + .unwrap(), + token: login_response.token, + } +} + +pub fn auth_header(token: &str) -> (HeaderName, HeaderValue) { + let auth_header_value = HeaderValue::from_str(&format!("Bearer {}", &token)).unwrap(); + + (HeaderName::from_static("authorization"), auth_header_value) +} diff --git a/tests/requests/snapshots/can_get_current_user@auth_request.snap b/tests/requests/snapshots/can_get_current_user@auth_request.snap new file mode 100644 index 0000000..74f7e71 --- /dev/null +++ b/tests/requests/snapshots/can_get_current_user@auth_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/auth.rs +expression: "(response.status_code(), response.text())" +--- +( + 200, + "{\"pid\":\"PID\",\"name\":\"loco\",\"email\":\"test@loco.com\"}", +) diff --git a/tests/requests/snapshots/can_login_without_verify@auth_request.snap b/tests/requests/snapshots/can_login_without_verify@auth_request.snap new file mode 100644 index 0000000..ef54ba6 --- /dev/null +++ b/tests/requests/snapshots/can_login_without_verify@auth_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/auth.rs +expression: "(response.status_code(), response.text())" +--- +( + 200, + "{\"token\":\"TOKEN\",\"pid\":\"PID\",\"name\":\"loco\",\"is_verified\":false}", +) diff --git a/tests/requests/snapshots/can_register@auth_request-2.snap b/tests/requests/snapshots/can_register@auth_request-2.snap new file mode 100644 index 0000000..f380dd9 --- /dev/null +++ b/tests/requests/snapshots/can_register@auth_request-2.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/auth.rs +expression: ctx.mailer.unwrap().deliveries() +--- +Deliveries { + count: 0, + messages: [], +} diff --git a/tests/requests/snapshots/can_register@auth_request.snap b/tests/requests/snapshots/can_register@auth_request.snap new file mode 100644 index 0000000..0c0e13b --- /dev/null +++ b/tests/requests/snapshots/can_register@auth_request.snap @@ -0,0 +1,25 @@ +--- +source: tests/requests/auth.rs +expression: saved_user +--- +Ok( + Model { + created_at: DATE, + updated_at: DATE, + id: ID + pid: PID, + email: "test@loco.com", + password: "PASSWORD", + api_key: "lo-PID", + name: "loco", + reset_token: None, + reset_sent_at: None, + email_verification_token: Some( + "PID", + ), + email_verification_sent_at: Some( + DATE, + ), + email_verified_at: None, + }, +) diff --git a/tests/requests/snapshots/can_reset_password@auth_request-2.snap b/tests/requests/snapshots/can_reset_password@auth_request-2.snap new file mode 100644 index 0000000..f380dd9 --- /dev/null +++ b/tests/requests/snapshots/can_reset_password@auth_request-2.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/auth.rs +expression: ctx.mailer.unwrap().deliveries() +--- +Deliveries { + count: 0, + messages: [], +} diff --git a/tests/requests/snapshots/can_reset_password@auth_request.snap b/tests/requests/snapshots/can_reset_password@auth_request.snap new file mode 100644 index 0000000..be6838d --- /dev/null +++ b/tests/requests/snapshots/can_reset_password@auth_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/auth.rs +expression: "(reset_response.status_code(), reset_response.text())" +--- +( + 200, + "null", +) diff --git a/tests/requests/snapshots/login_with_invalid_password@auth_request.snap b/tests/requests/snapshots/login_with_invalid_password@auth_request.snap new file mode 100644 index 0000000..eb6e89f --- /dev/null +++ b/tests/requests/snapshots/login_with_invalid_password@auth_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/auth.rs +expression: "(response.status_code(), response.text())" +--- +( + 401, + "{\"error\":\"unauthorized\",\"description\":\"You do not have permission to access this resource\"}", +) diff --git a/tests/requests/snapshots/login_with_valid_password@auth_request.snap b/tests/requests/snapshots/login_with_valid_password@auth_request.snap new file mode 100644 index 0000000..f06fbaa --- /dev/null +++ b/tests/requests/snapshots/login_with_valid_password@auth_request.snap @@ -0,0 +1,8 @@ +--- +source: tests/requests/auth.rs +expression: "(response.status_code(), response.text())" +--- +( + 200, + "{\"token\":\"TOKEN\",\"pid\":\"PID\",\"name\":\"loco\",\"is_verified\":true}", +) diff --git a/tests/tasks/mod.rs b/tests/tasks/mod.rs new file mode 100644 index 0000000..01fbdda --- /dev/null +++ b/tests/tasks/mod.rs @@ -0,0 +1 @@ +pub mod seed; diff --git a/tests/tasks/seed.rs b/tests/tasks/seed.rs new file mode 100644 index 0000000..114e4f4 --- /dev/null +++ b/tests/tasks/seed.rs @@ -0,0 +1,17 @@ +use loco_rs::{boot::run_task, task, testing}; +use serial_test::serial; +use thoth::app::App; + +#[tokio::test] +#[serial] +async fn test_can_seed_data() { + let boot = testing::boot_test::().await.unwrap(); + + assert!(run_task::( + &boot.app_context, + Some(&"seed_data".to_string()), + &task::Vars::default() + ) + .await + .is_ok()); +} diff --git a/tests/workers/mod.rs b/tests/workers/mod.rs new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/tests/workers/mod.rs @@ -0,0 +1 @@ +