smbcloud-cli 0.3.39__tar.gz → 0.3.41__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/Cargo.lock +17 -17
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/PKG-INFO +1 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/Cargo.toml +1 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/README.md +6 -6
- smbcloud_cli-0.3.41/crates/cli/src/account/cli.rs +13 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/forgot/mod.rs +1 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/lib.rs +6 -16
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/login/process.rs +13 -27
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/logout/mod.rs +2 -4
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/detect_runner.rs +11 -3
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/mod.rs +1 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/process_deploy.rs +6 -0
- smbcloud_cli-0.3.41/crates/cli/src/deploy/process_deploy_rust.rs +310 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/setup_create_new_project.rs +7 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/crud_create.rs +11 -4
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/crud_update.rs +7 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/Cargo.toml +1 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/Cargo.toml +1 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/Cargo.toml +1 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/error_codes.rs +2 -2
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/runner.rs +6 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-network/Cargo.toml +1 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking/Cargo.toml +1 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking/README.md +1 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/Cargo.toml +1 -1
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-utils/Cargo.toml +1 -1
- smbcloud_cli-0.3.39/crates/cli/src/account/cli.rs +0 -13
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/Cargo.toml +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/README.md +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/login/mod.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/me/mod.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/mod.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/signup/mod.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/signup/process.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/cli/mod.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/config.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/git.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/known_hosts.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/process_deploy_nextjs_ssr.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/process_deploy_rails.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/process_deploy_vite_spa.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/remote_messages.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/rsync_deploy.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/setup.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/setup_project.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/setup_select_project.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/lib.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/mail/cli.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/mail/current_project.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/mail/process.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/mail/render.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/mail.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/main.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/cli.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/crud_delete.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/crud_read.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/deployment.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/mod.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/process.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/token/clear_smb_token.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/token/get_smb_token.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/token/is_logged_in.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/token/mod.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/token/smb_token_file_path.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/confirm_dialog.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/deployment_detail_view.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/deployment_table.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/me_view.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/mod.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/project_detail_view.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/project_table.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/theme.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/.gitignore +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/README.md +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/apple.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/check_email.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/client_credentials.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/lib.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/login.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/logout.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/me.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/get_account_status.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/get_consent_url.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/get_profile.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/get_token.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/mod.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/provider.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oidc.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/remove.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/resend_email_verification.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/resend_reset_password_instruction.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/reset_password.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/signup.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/README.md +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/mail_app.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/mail_inbox.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/mail_message.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/request.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/smbcloud_mail.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/url_builder.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/README.md +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/account.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/app_auth.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/forgot.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/frontend_app.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/lib.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/login.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/mail.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/oauth.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/project.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/repository.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/reset_password_response.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/signup.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-network/README.md +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-network/src/environment.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-network/src/lib.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-network/src/network.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking/src/constants.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking/src/lib.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking/src/smb_client.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/README.md +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_frontend_app_read.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_create.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_delete.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_deployment_create.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_deployment_read.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_deployment_update.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_read.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_update.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/lib.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/url_builder.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-utils/README.md +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-utils/src/config.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-utils/src/lib.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-utils/src/write_config.rs +0 -0
- {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/pyproject.toml +0 -0
|
@@ -2220,10 +2220,6 @@ version = "1.0.23"
|
|
|
2220
2220
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
2221
2221
|
checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f"
|
|
2222
2222
|
|
|
2223
|
-
[[package]]
|
|
2224
|
-
name = "s6n"
|
|
2225
|
-
version = "0.3.39"
|
|
2226
|
-
|
|
2227
2223
|
[[package]]
|
|
2228
2224
|
name = "same-file"
|
|
2229
2225
|
version = "1.0.6"
|
|
@@ -2463,7 +2459,7 @@ checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
|
|
|
2463
2459
|
|
|
2464
2460
|
[[package]]
|
|
2465
2461
|
name = "smbcloud-auth"
|
|
2466
|
-
version = "0.3.
|
|
2462
|
+
version = "0.3.41"
|
|
2467
2463
|
dependencies = [
|
|
2468
2464
|
"log",
|
|
2469
2465
|
"reqwest",
|
|
@@ -2478,7 +2474,7 @@ dependencies = [
|
|
|
2478
2474
|
|
|
2479
2475
|
[[package]]
|
|
2480
2476
|
name = "smbcloud-auth-sdk"
|
|
2481
|
-
version = "0.3.
|
|
2477
|
+
version = "0.3.41"
|
|
2482
2478
|
dependencies = [
|
|
2483
2479
|
"base64",
|
|
2484
2480
|
"reqwest",
|
|
@@ -2493,7 +2489,7 @@ dependencies = [
|
|
|
2493
2489
|
|
|
2494
2490
|
[[package]]
|
|
2495
2491
|
name = "smbcloud-auth-sdk-py"
|
|
2496
|
-
version = "0.3.
|
|
2492
|
+
version = "0.3.41"
|
|
2497
2493
|
dependencies = [
|
|
2498
2494
|
"pyo3",
|
|
2499
2495
|
"pythonize",
|
|
@@ -2507,7 +2503,7 @@ dependencies = [
|
|
|
2507
2503
|
|
|
2508
2504
|
[[package]]
|
|
2509
2505
|
name = "smbcloud-auth-sdk-wasm"
|
|
2510
|
-
version = "0.3.
|
|
2506
|
+
version = "0.3.41"
|
|
2511
2507
|
dependencies = [
|
|
2512
2508
|
"serde-wasm-bindgen",
|
|
2513
2509
|
"smbcloud-auth-sdk",
|
|
@@ -2520,7 +2516,7 @@ dependencies = [
|
|
|
2520
2516
|
|
|
2521
2517
|
[[package]]
|
|
2522
2518
|
name = "smbcloud-cli"
|
|
2523
|
-
version = "0.3.
|
|
2519
|
+
version = "0.3.41"
|
|
2524
2520
|
dependencies = [
|
|
2525
2521
|
"anyhow",
|
|
2526
2522
|
"chrono",
|
|
@@ -2563,7 +2559,7 @@ dependencies = [
|
|
|
2563
2559
|
|
|
2564
2560
|
[[package]]
|
|
2565
2561
|
name = "smbcloud-gresiq"
|
|
2566
|
-
version = "0.3.
|
|
2562
|
+
version = "0.3.41"
|
|
2567
2563
|
dependencies = [
|
|
2568
2564
|
"native-tls",
|
|
2569
2565
|
"postgres-native-tls",
|
|
@@ -2577,7 +2573,7 @@ dependencies = [
|
|
|
2577
2573
|
|
|
2578
2574
|
[[package]]
|
|
2579
2575
|
name = "smbcloud-gresiq-sdk"
|
|
2580
|
-
version = "0.3.
|
|
2576
|
+
version = "0.3.41"
|
|
2581
2577
|
dependencies = [
|
|
2582
2578
|
"anyhow",
|
|
2583
2579
|
"log",
|
|
@@ -2591,7 +2587,7 @@ dependencies = [
|
|
|
2591
2587
|
|
|
2592
2588
|
[[package]]
|
|
2593
2589
|
name = "smbcloud-mail"
|
|
2594
|
-
version = "0.3.
|
|
2590
|
+
version = "0.3.41"
|
|
2595
2591
|
dependencies = [
|
|
2596
2592
|
"reqwest",
|
|
2597
2593
|
"serde",
|
|
@@ -2603,7 +2599,7 @@ dependencies = [
|
|
|
2603
2599
|
|
|
2604
2600
|
[[package]]
|
|
2605
2601
|
name = "smbcloud-model"
|
|
2606
|
-
version = "0.3.
|
|
2602
|
+
version = "0.3.41"
|
|
2607
2603
|
dependencies = [
|
|
2608
2604
|
"chrono",
|
|
2609
2605
|
"log",
|
|
@@ -2619,7 +2615,7 @@ dependencies = [
|
|
|
2619
2615
|
|
|
2620
2616
|
[[package]]
|
|
2621
2617
|
name = "smbcloud-network"
|
|
2622
|
-
version = "0.3.
|
|
2618
|
+
version = "0.3.41"
|
|
2623
2619
|
dependencies = [
|
|
2624
2620
|
"clap 4.6.1",
|
|
2625
2621
|
"log",
|
|
@@ -2632,7 +2628,7 @@ dependencies = [
|
|
|
2632
2628
|
|
|
2633
2629
|
[[package]]
|
|
2634
2630
|
name = "smbcloud-networking"
|
|
2635
|
-
version = "0.3.
|
|
2631
|
+
version = "0.3.41"
|
|
2636
2632
|
dependencies = [
|
|
2637
2633
|
"smbcloud-network",
|
|
2638
2634
|
"url-builder",
|
|
@@ -2640,7 +2636,7 @@ dependencies = [
|
|
|
2640
2636
|
|
|
2641
2637
|
[[package]]
|
|
2642
2638
|
name = "smbcloud-networking-project"
|
|
2643
|
-
version = "0.3.
|
|
2639
|
+
version = "0.3.41"
|
|
2644
2640
|
dependencies = [
|
|
2645
2641
|
"anyhow",
|
|
2646
2642
|
"async-trait",
|
|
@@ -2656,9 +2652,13 @@ dependencies = [
|
|
|
2656
2652
|
"thiserror 2.0.18",
|
|
2657
2653
|
]
|
|
2658
2654
|
|
|
2655
|
+
[[package]]
|
|
2656
|
+
name = "smbcloud-s6n"
|
|
2657
|
+
version = "0.3.41"
|
|
2658
|
+
|
|
2659
2659
|
[[package]]
|
|
2660
2660
|
name = "smbcloud-utils"
|
|
2661
|
-
version = "0.3.
|
|
2661
|
+
version = "0.3.41"
|
|
2662
2662
|
dependencies = [
|
|
2663
2663
|
"anyhow",
|
|
2664
2664
|
"dirs",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
|
|
23
23
|
## Installation
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
You can install the CLI a few different ways.
|
|
26
26
|
|
|
27
27
|
### With Cargo
|
|
28
28
|
|
|
@@ -51,7 +51,7 @@ pip install smbcloud-cli
|
|
|
51
51
|
|
|
52
52
|
## Update
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
To update the CLI, run the same install command again.
|
|
55
55
|
|
|
56
56
|
## Uninstall
|
|
57
57
|
|
|
@@ -78,16 +78,16 @@ smb --help
|
|
|
78
78
|
|
|
79
79
|
## Contribution
|
|
80
80
|
|
|
81
|
-
-
|
|
81
|
+
- Set up your Rust tooling.
|
|
82
82
|
- Clone the repo.
|
|
83
|
-
-
|
|
83
|
+
- Add the required environment variables to `.env.local`.
|
|
84
84
|
- Run `cargo run`.
|
|
85
85
|
|
|
86
86
|
## Credits
|
|
87
87
|
|
|
88
|
-
This repo
|
|
88
|
+
This repo draws inspiration from [Sugar](https://github.com/metaplex-foundation/sugar).
|
|
89
89
|
|
|
90
|
-
|
|
90
|
+
It also borrows ideas from [the 12 factor CLI app](https://medium.com/@jdxcode/12-factor-cli-apps-dd3c227a0e46).
|
|
91
91
|
|
|
92
92
|
> Explore more on the [smbCloud Services](https://smbcloud.xyz/services) page.
|
|
93
93
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
use clap::Subcommand;
|
|
2
|
+
|
|
3
|
+
#[derive(Subcommand)]
|
|
4
|
+
pub enum Commands {
|
|
5
|
+
#[clap(about = "Create an account with your email address.")]
|
|
6
|
+
Signup {},
|
|
7
|
+
#[clap(about = "Log in to your account. If you need one first, run `smb signup`.")]
|
|
8
|
+
Login {},
|
|
9
|
+
#[clap(about = "Log out of your current session.")]
|
|
10
|
+
Logout {},
|
|
11
|
+
#[clap(about = "Start the password reset flow.")]
|
|
12
|
+
Forgot {},
|
|
13
|
+
}
|
|
@@ -13,7 +13,7 @@ use smbcloud_utils::email_validation;
|
|
|
13
13
|
use spinners::Spinner;
|
|
14
14
|
|
|
15
15
|
pub async fn process_forgot(env: Environment) -> Result<CommandResult> {
|
|
16
|
-
println!("
|
|
16
|
+
println!("Enter your email address.");
|
|
17
17
|
let email = Input::<String>::with_theme(&ColorfulTheme::default())
|
|
18
18
|
.with_prompt("Email")
|
|
19
19
|
.validate_with(|email: &String| email_validation(email))
|
|
@@ -25,9 +25,7 @@ use {
|
|
|
25
25
|
};
|
|
26
26
|
|
|
27
27
|
pub async fn authorize_github(env: &Environment) -> Result<SmbAuthorization> {
|
|
28
|
-
//
|
|
29
|
-
// setup_oauth_callback_server();
|
|
30
|
-
// Open the GitHub OAuth URL in the user's browser
|
|
28
|
+
// Listen for the GitHub OAuth callback on localhost, then open the browser.
|
|
31
29
|
let mut spinner = Spinner::new(
|
|
32
30
|
spinners::Spinners::BouncingBall,
|
|
33
31
|
style("🚀 Getting your GitHub information...")
|
|
@@ -61,7 +59,6 @@ pub async fn authorize_github(env: &Environment) -> Result<SmbAuthorization> {
|
|
|
61
59
|
match rx.recv() {
|
|
62
60
|
Ok(code) => {
|
|
63
61
|
debug!("Got code from channel: {:#?}", &code);
|
|
64
|
-
//Err(anyhow!("Failed to get code from channel."))
|
|
65
62
|
process_connect_github(*env, code).await
|
|
66
63
|
}
|
|
67
64
|
Err(e) => {
|
|
@@ -144,7 +141,6 @@ fn handle_connection(mut stream: TcpStream, tx: Sender<String>) {
|
|
|
144
141
|
stream.flush().unwrap();
|
|
145
142
|
}
|
|
146
143
|
|
|
147
|
-
// Get access token
|
|
148
144
|
pub async fn process_connect_github(env: Environment, code: String) -> Result<SmbAuthorization> {
|
|
149
145
|
let response = Client::new()
|
|
150
146
|
.post(build_authorize_smb_url(env))
|
|
@@ -160,10 +156,8 @@ pub async fn process_connect_github(env: Environment, code: String) -> Result<Sm
|
|
|
160
156
|
.bold()
|
|
161
157
|
.to_string(),
|
|
162
158
|
);
|
|
163
|
-
// println!("Response: {:#?}", &response);
|
|
164
159
|
match response.status() {
|
|
165
160
|
StatusCode::OK => {
|
|
166
|
-
// Account authorized and token received
|
|
167
161
|
spinner.stop_and_persist("✅", "You are logged in with your GitHub account!".into());
|
|
168
162
|
save_token(env, &response).await?;
|
|
169
163
|
let result = response.json().await?;
|
|
@@ -171,21 +165,16 @@ pub async fn process_connect_github(env: Environment, code: String) -> Result<Sm
|
|
|
171
165
|
Ok(result)
|
|
172
166
|
}
|
|
173
167
|
StatusCode::NOT_FOUND => {
|
|
174
|
-
|
|
175
|
-
spinner.stop_and_persist("🥲", "Account not found. Please signup!".into());
|
|
168
|
+
spinner.stop_and_persist("🥲", "Account not found. Please sign up.".into());
|
|
176
169
|
let result = response.json().await?;
|
|
177
|
-
// println!("Result: {:#?}", &result);
|
|
178
170
|
Ok(result)
|
|
179
171
|
}
|
|
180
172
|
StatusCode::UNPROCESSABLE_ENTITY => {
|
|
181
|
-
|
|
182
|
-
spinner.stop_and_persist("🥹", "Unverified email!".into());
|
|
173
|
+
spinner.stop_and_persist("🥹", "Please verify your email address.".into());
|
|
183
174
|
let result = response.json().await?;
|
|
184
|
-
// println!("Result: {:#?}", &result);
|
|
185
175
|
Ok(result)
|
|
186
176
|
}
|
|
187
177
|
_ => {
|
|
188
|
-
// Other errors
|
|
189
178
|
let error = anyhow!("Error while authorizing with GitHub.");
|
|
190
179
|
Err(error)
|
|
191
180
|
}
|
|
@@ -222,13 +211,14 @@ fn github_base_url_builder() -> URLBuilder {
|
|
|
222
211
|
|
|
223
212
|
pub async fn save_token(env: Environment, response: &Response) -> Result<()> {
|
|
224
213
|
let headers = response.headers();
|
|
225
|
-
// println!("Headers: {:#?}", &headers);
|
|
226
214
|
match headers.get("Authorization") {
|
|
227
215
|
Some(token) => {
|
|
228
216
|
debug!("{}", token.to_str()?);
|
|
229
217
|
store_token(env, token.to_str()?.to_string()).await
|
|
230
218
|
}
|
|
231
|
-
None => Err(anyhow!(
|
|
219
|
+
None => Err(anyhow!(
|
|
220
|
+
"Failed to get the access token from the server response."
|
|
221
|
+
)),
|
|
232
222
|
}
|
|
233
223
|
}
|
|
234
224
|
|
|
@@ -78,8 +78,6 @@ pub async fn process_login(env: Environment, is_logged_in: Option<bool>) -> Resu
|
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
// Private functions
|
|
82
|
-
|
|
83
81
|
async fn login_with_github(env: Environment) -> Result<CommandResult> {
|
|
84
82
|
match authorize_github(&env).await {
|
|
85
83
|
Ok(result) => process_authorization(env, result).await,
|
|
@@ -91,15 +89,13 @@ async fn login_with_github(env: Environment) -> Result<CommandResult> {
|
|
|
91
89
|
}
|
|
92
90
|
|
|
93
91
|
async fn process_authorization(env: Environment, auth: SmbAuthorization) -> Result<CommandResult> {
|
|
94
|
-
//
|
|
95
|
-
// Check error_code first
|
|
92
|
+
// Handle the account state returned by the OAuth flow before treating it as a login.
|
|
96
93
|
if let Some(error_code) = auth.error_code {
|
|
97
94
|
debug!("{}", error_code);
|
|
98
95
|
match error_code {
|
|
99
96
|
EmailNotFound => return create_new_account(env, auth.user_email, auth.user_info).await,
|
|
100
97
|
EmailUnverified => return send_email_verification(env, auth.user).await,
|
|
101
98
|
PasswordNotSet => {
|
|
102
|
-
// Only for email and password login
|
|
103
99
|
let error = anyhow!("Password not set.");
|
|
104
100
|
return Err(error);
|
|
105
101
|
}
|
|
@@ -107,14 +103,12 @@ async fn process_authorization(env: Environment, auth: SmbAuthorization) -> Resu
|
|
|
107
103
|
}
|
|
108
104
|
}
|
|
109
105
|
|
|
110
|
-
//
|
|
111
|
-
// Token handling is in the lib.rs account module.
|
|
106
|
+
// Token handling lives in the account module.
|
|
112
107
|
if let Some(user) = auth.user {
|
|
113
108
|
let spinner = Spinner::new(
|
|
114
109
|
spinners::Spinners::SimpleDotsScrolling,
|
|
115
110
|
style("Logging you in...").green().bold().to_string(),
|
|
116
111
|
);
|
|
117
|
-
// We're logged in with GitHub.
|
|
118
112
|
return Ok(CommandResult {
|
|
119
113
|
spinner,
|
|
120
114
|
symbol: "✅".to_owned(),
|
|
@@ -142,7 +136,6 @@ async fn create_new_account(
|
|
|
142
136
|
}
|
|
143
137
|
};
|
|
144
138
|
|
|
145
|
-
// Create account if user confirms
|
|
146
139
|
if !confirm {
|
|
147
140
|
let spinner = Spinner::new(
|
|
148
141
|
spinners::Spinners::SimpleDotsScrolling,
|
|
@@ -169,11 +162,10 @@ async fn create_new_account(
|
|
|
169
162
|
return do_signup(env, ¶ms).await;
|
|
170
163
|
}
|
|
171
164
|
|
|
172
|
-
Err(anyhow!("
|
|
165
|
+
Err(anyhow!("GitHub returned incomplete account details."))
|
|
173
166
|
}
|
|
174
167
|
|
|
175
168
|
async fn send_email_verification(env: Environment, user: Option<User>) -> Result<CommandResult> {
|
|
176
|
-
// Return early if user is null
|
|
177
169
|
if let Some(user) = user {
|
|
178
170
|
let confirm = match Confirm::with_theme(&ColorfulTheme::default())
|
|
179
171
|
.with_prompt("Do you want to send a new verification email?")
|
|
@@ -186,16 +178,15 @@ async fn send_email_verification(env: Environment, user: Option<User>) -> Result
|
|
|
186
178
|
}
|
|
187
179
|
};
|
|
188
180
|
|
|
189
|
-
// Send verification email if user confirms
|
|
190
181
|
if !confirm {
|
|
191
182
|
let spinner = Spinner::new(
|
|
192
183
|
spinners::Spinners::SimpleDotsScrolling,
|
|
193
|
-
style("
|
|
184
|
+
style("Cancelled.").green().bold().to_string(),
|
|
194
185
|
);
|
|
195
186
|
return Ok(CommandResult {
|
|
196
187
|
spinner,
|
|
197
188
|
symbol: succeed_symbol(),
|
|
198
|
-
msg: succeed_message("
|
|
189
|
+
msg: succeed_message("Cancelled."),
|
|
199
190
|
});
|
|
200
191
|
}
|
|
201
192
|
resend_email_verification(env, user).await
|
|
@@ -238,16 +229,15 @@ async fn connect_github_account(env: Environment, auth: SmbAuthorization) -> Res
|
|
|
238
229
|
}
|
|
239
230
|
};
|
|
240
231
|
|
|
241
|
-
// Link GitHub account if user confirms
|
|
242
232
|
if !confirm {
|
|
243
233
|
let spinner = Spinner::new(
|
|
244
234
|
spinners::Spinners::SimpleDotsScrolling,
|
|
245
|
-
succeed_message("
|
|
235
|
+
succeed_message("Cancelled."),
|
|
246
236
|
);
|
|
247
237
|
return Ok(CommandResult {
|
|
248
238
|
spinner,
|
|
249
239
|
symbol: succeed_symbol(),
|
|
250
|
-
msg: succeed_message("
|
|
240
|
+
msg: succeed_message("Cancelled."),
|
|
251
241
|
});
|
|
252
242
|
}
|
|
253
243
|
|
|
@@ -278,7 +268,7 @@ async fn connect_github_account(env: Environment, auth: SmbAuthorization) -> Res
|
|
|
278
268
|
}
|
|
279
269
|
|
|
280
270
|
async fn login_with_email(env: Environment) -> Result<CommandResult> {
|
|
281
|
-
println!("
|
|
271
|
+
println!("Enter your login details.");
|
|
282
272
|
let username = match Input::<String>::with_theme(&ColorfulTheme::default())
|
|
283
273
|
.with_prompt("Email")
|
|
284
274
|
.validate_with(|email: &String| email_validation(email))
|
|
@@ -293,9 +283,7 @@ async fn login_with_email(env: Environment) -> Result<CommandResult> {
|
|
|
293
283
|
|
|
294
284
|
match check_email(env, client(), &username).await {
|
|
295
285
|
Ok(auth) => {
|
|
296
|
-
// Only continue with password input if email is found and confirmed.
|
|
297
286
|
if auth.error_code.is_some() {
|
|
298
|
-
// Check if email is in the database, unconfirmed. Only presents password input if email is found and confirmed.
|
|
299
287
|
let spinner = Spinner::new(
|
|
300
288
|
spinners::Spinners::SimpleDotsScrolling,
|
|
301
289
|
succeed_message("Checking email"),
|
|
@@ -382,11 +370,11 @@ async fn after_checking_email_step(
|
|
|
382
370
|
}
|
|
383
371
|
_ => {
|
|
384
372
|
spinner.stop_and_persist(&fail_symbol(), fail_message("An error occurred."));
|
|
385
|
-
Err(anyhow!("
|
|
373
|
+
Err(anyhow!("The server returned an unexpected account state."))
|
|
386
374
|
}
|
|
387
375
|
}
|
|
388
376
|
}
|
|
389
|
-
None => Err(anyhow!("
|
|
377
|
+
None => Err(anyhow!("The server did not return an account state.")),
|
|
390
378
|
}
|
|
391
379
|
}
|
|
392
380
|
|
|
@@ -421,13 +409,12 @@ async fn action_on_account_status(
|
|
|
421
409
|
}
|
|
422
410
|
_ => {
|
|
423
411
|
spinner.stop_and_persist(&fail_symbol(), fail_message("An error occurred."));
|
|
424
|
-
Err(anyhow!("
|
|
412
|
+
Err(anyhow!("The server returned an unexpected account state."))
|
|
425
413
|
}
|
|
426
414
|
}
|
|
427
415
|
}
|
|
428
416
|
|
|
429
417
|
async fn send_reset_password(env: Environment, user: Option<User>) -> Result<CommandResult> {
|
|
430
|
-
// Return early if user is null
|
|
431
418
|
if let Some(user) = user {
|
|
432
419
|
let confirm = match Confirm::with_theme(&ColorfulTheme::default())
|
|
433
420
|
.with_prompt("Do you want to reset your password?")
|
|
@@ -440,16 +427,15 @@ async fn send_reset_password(env: Environment, user: Option<User>) -> Result<Com
|
|
|
440
427
|
}
|
|
441
428
|
};
|
|
442
429
|
|
|
443
|
-
// Send verification email if user confirms
|
|
444
430
|
if !confirm {
|
|
445
431
|
let spinner = Spinner::new(
|
|
446
432
|
spinners::Spinners::SimpleDotsScrolling,
|
|
447
|
-
style("
|
|
433
|
+
style("Cancelled.").green().bold().to_string(),
|
|
448
434
|
);
|
|
449
435
|
return Ok(CommandResult {
|
|
450
436
|
spinner,
|
|
451
437
|
symbol: succeed_symbol(),
|
|
452
|
-
msg: succeed_message("
|
|
438
|
+
msg: succeed_message("Cancelled."),
|
|
453
439
|
});
|
|
454
440
|
}
|
|
455
441
|
resend_reset_password_instruction(env, user).await
|
|
@@ -14,7 +14,6 @@ use {
|
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
pub async fn process_logout(env: Environment) -> Result<CommandResult> {
|
|
17
|
-
// Logout if user confirms
|
|
18
17
|
if let Some(token_path) = smb_token_file_path(env) {
|
|
19
18
|
let confirm = match Confirm::with_theme(&ColorfulTheme::default())
|
|
20
19
|
.with_prompt("Do you want to logout? y/n")
|
|
@@ -30,10 +29,10 @@ pub async fn process_logout(env: Environment) -> Result<CommandResult> {
|
|
|
30
29
|
return Ok(CommandResult {
|
|
31
30
|
spinner: Spinner::new(
|
|
32
31
|
spinners::Spinners::SimpleDotsScrolling,
|
|
33
|
-
succeed_message("
|
|
32
|
+
succeed_message("Cancelled."),
|
|
34
33
|
),
|
|
35
34
|
symbol: succeed_symbol(),
|
|
36
|
-
msg: succeed_message("
|
|
35
|
+
msg: succeed_message("Cancelled."),
|
|
37
36
|
});
|
|
38
37
|
}
|
|
39
38
|
|
|
@@ -42,7 +41,6 @@ pub async fn process_logout(env: Environment) -> Result<CommandResult> {
|
|
|
42
41
|
succeed_message("Logging you out"),
|
|
43
42
|
);
|
|
44
43
|
|
|
45
|
-
// Call backend
|
|
46
44
|
match do_process_logout(env).await {
|
|
47
45
|
Ok(_) => {
|
|
48
46
|
fs::remove_file(token_path)?;
|
|
@@ -21,7 +21,7 @@ pub(crate) async fn detect_runner(config: &Config) -> Result<Runner> {
|
|
|
21
21
|
fail_message("Could not get the current path."),
|
|
22
22
|
);
|
|
23
23
|
anyhow::bail!(
|
|
24
|
-
"Could not detect project runner: no package.json, Gemfile,
|
|
24
|
+
"Could not detect project runner: no package.json, Gemfile, Package.swift, or Cargo.toml found"
|
|
25
25
|
);
|
|
26
26
|
}
|
|
27
27
|
};
|
|
@@ -36,11 +36,11 @@ pub(crate) async fn detect_runner(config: &Config) -> Result<Runner> {
|
|
|
36
36
|
spinner.stop_and_persist(
|
|
37
37
|
&fail_symbol(),
|
|
38
38
|
fail_message(
|
|
39
|
-
"Could not detect project runner: no package.json, Gemfile,
|
|
39
|
+
"Could not detect project runner: no package.json, Gemfile, Package.swift, or Cargo.toml found",
|
|
40
40
|
),
|
|
41
41
|
);
|
|
42
42
|
anyhow::bail!(
|
|
43
|
-
"Could not detect project runner: no package.json, Gemfile,
|
|
43
|
+
"Could not detect project runner: no package.json, Gemfile, Package.swift, or Cargo.toml found"
|
|
44
44
|
);
|
|
45
45
|
}
|
|
46
46
|
};
|
|
@@ -80,6 +80,14 @@ pub(crate) async fn detect_runner(config: &Config) -> Result<Runner> {
|
|
|
80
80
|
);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
83
|
+
Runner::Rust => {
|
|
84
|
+
if Path::new("Cargo.toml").exists() {
|
|
85
|
+
spinner.stop_and_persist(
|
|
86
|
+
&succeed_symbol(),
|
|
87
|
+
succeed_message("Rust 🦀 runner with Cargo project detected"),
|
|
88
|
+
);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
83
91
|
};
|
|
84
92
|
|
|
85
93
|
Ok(runner)
|
|
@@ -9,6 +9,7 @@ use {
|
|
|
9
9
|
git::remote_deployment_setup,
|
|
10
10
|
process_deploy_nextjs_ssr::process_deploy_nextjs_ssr,
|
|
11
11
|
process_deploy_rails::process_deploy_rails,
|
|
12
|
+
process_deploy_rust::process_deploy_rust,
|
|
12
13
|
process_deploy_vite_spa::process_deploy_vite_spa,
|
|
13
14
|
remote_messages::{build_next_app, start_server},
|
|
14
15
|
rsync_deploy::rsync_deploy,
|
|
@@ -135,6 +136,11 @@ pub async fn process_deploy(
|
|
|
135
136
|
return process_deploy_rails(env, config).await;
|
|
136
137
|
}
|
|
137
138
|
|
|
139
|
+
// Route Rust service projects: rsync source tree, then run a remote Cargo build script.
|
|
140
|
+
if config.project.kind.as_deref() == Some("rust") {
|
|
141
|
+
return process_deploy_rust(env, config).await;
|
|
142
|
+
}
|
|
143
|
+
|
|
138
144
|
match config.project.deployment_method {
|
|
139
145
|
DeploymentMethod::Rsync => {
|
|
140
146
|
// For rsync deployments the runner is known from config — no framework
|