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.
Files changed (136) hide show
  1. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/Cargo.lock +17 -17
  2. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/PKG-INFO +1 -1
  3. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/Cargo.toml +1 -1
  4. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/README.md +6 -6
  5. smbcloud_cli-0.3.41/crates/cli/src/account/cli.rs +13 -0
  6. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/forgot/mod.rs +1 -1
  7. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/lib.rs +6 -16
  8. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/login/process.rs +13 -27
  9. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/logout/mod.rs +2 -4
  10. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/detect_runner.rs +11 -3
  11. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/mod.rs +1 -0
  12. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/process_deploy.rs +6 -0
  13. smbcloud_cli-0.3.41/crates/cli/src/deploy/process_deploy_rust.rs +310 -0
  14. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/setup_create_new_project.rs +7 -1
  15. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/crud_create.rs +11 -4
  16. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/crud_update.rs +7 -1
  17. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/Cargo.toml +1 -1
  18. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/Cargo.toml +1 -1
  19. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/Cargo.toml +1 -1
  20. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/error_codes.rs +2 -2
  21. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/runner.rs +6 -1
  22. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-network/Cargo.toml +1 -1
  23. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking/Cargo.toml +1 -1
  24. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking/README.md +1 -1
  25. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/Cargo.toml +1 -1
  26. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-utils/Cargo.toml +1 -1
  27. smbcloud_cli-0.3.39/crates/cli/src/account/cli.rs +0 -13
  28. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/Cargo.toml +0 -0
  29. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/README.md +0 -0
  30. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/login/mod.rs +0 -0
  31. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/me/mod.rs +0 -0
  32. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/mod.rs +0 -0
  33. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/signup/mod.rs +0 -0
  34. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/account/signup/process.rs +0 -0
  35. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/cli/mod.rs +0 -0
  36. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/config.rs +0 -0
  37. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/git.rs +0 -0
  38. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/known_hosts.rs +0 -0
  39. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/process_deploy_nextjs_ssr.rs +0 -0
  40. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/process_deploy_rails.rs +0 -0
  41. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/process_deploy_vite_spa.rs +0 -0
  42. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/remote_messages.rs +0 -0
  43. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/rsync_deploy.rs +0 -0
  44. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/setup.rs +0 -0
  45. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/setup_project.rs +0 -0
  46. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/deploy/setup_select_project.rs +0 -0
  47. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/lib.rs +0 -0
  48. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/mail/cli.rs +0 -0
  49. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/mail/current_project.rs +0 -0
  50. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/mail/process.rs +0 -0
  51. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/mail/render.rs +0 -0
  52. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/mail.rs +0 -0
  53. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/main.rs +0 -0
  54. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/cli.rs +0 -0
  55. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/crud_delete.rs +0 -0
  56. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/crud_read.rs +0 -0
  57. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/deployment.rs +0 -0
  58. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/mod.rs +0 -0
  59. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/project/process.rs +0 -0
  60. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/token/clear_smb_token.rs +0 -0
  61. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/token/get_smb_token.rs +0 -0
  62. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/token/is_logged_in.rs +0 -0
  63. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/token/mod.rs +0 -0
  64. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/token/smb_token_file_path.rs +0 -0
  65. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/confirm_dialog.rs +0 -0
  66. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/deployment_detail_view.rs +0 -0
  67. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/deployment_table.rs +0 -0
  68. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/me_view.rs +0 -0
  69. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/mod.rs +0 -0
  70. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/project_detail_view.rs +0 -0
  71. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/project_table.rs +0 -0
  72. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/cli/src/ui/theme.rs +0 -0
  73. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/.gitignore +0 -0
  74. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/README.md +0 -0
  75. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/apple.rs +0 -0
  76. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/check_email.rs +0 -0
  77. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/client_credentials.rs +0 -0
  78. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/lib.rs +0 -0
  79. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/login.rs +0 -0
  80. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/logout.rs +0 -0
  81. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/me.rs +0 -0
  82. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/get_account_status.rs +0 -0
  83. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/get_consent_url.rs +0 -0
  84. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/get_profile.rs +0 -0
  85. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/get_token.rs +0 -0
  86. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/mod.rs +0 -0
  87. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oauth/provider.rs +0 -0
  88. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/oidc.rs +0 -0
  89. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/remove.rs +0 -0
  90. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/resend_email_verification.rs +0 -0
  91. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/resend_reset_password_instruction.rs +0 -0
  92. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/reset_password.rs +0 -0
  93. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-auth/src/signup.rs +0 -0
  94. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/README.md +0 -0
  95. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/mail_app.rs +0 -0
  96. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/mail_inbox.rs +0 -0
  97. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/mail_message.rs +0 -0
  98. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/request.rs +0 -0
  99. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/smbcloud_mail.rs +0 -0
  100. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-mail/src/url_builder.rs +0 -0
  101. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/README.md +0 -0
  102. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/account.rs +0 -0
  103. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/app_auth.rs +0 -0
  104. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/forgot.rs +0 -0
  105. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/frontend_app.rs +0 -0
  106. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/lib.rs +0 -0
  107. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/login.rs +0 -0
  108. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/mail.rs +0 -0
  109. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/oauth.rs +0 -0
  110. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/project.rs +0 -0
  111. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/repository.rs +0 -0
  112. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/reset_password_response.rs +0 -0
  113. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-model/src/signup.rs +0 -0
  114. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-network/README.md +0 -0
  115. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-network/src/environment.rs +0 -0
  116. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-network/src/lib.rs +0 -0
  117. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-network/src/network.rs +0 -0
  118. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking/src/constants.rs +0 -0
  119. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking/src/lib.rs +0 -0
  120. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking/src/smb_client.rs +0 -0
  121. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/README.md +0 -0
  122. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_frontend_app_read.rs +0 -0
  123. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_create.rs +0 -0
  124. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_delete.rs +0 -0
  125. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_deployment_create.rs +0 -0
  126. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_deployment_read.rs +0 -0
  127. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_deployment_update.rs +0 -0
  128. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_read.rs +0 -0
  129. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/crud_project_update.rs +0 -0
  130. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/lib.rs +0 -0
  131. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-networking-project/src/url_builder.rs +0 -0
  132. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-utils/README.md +0 -0
  133. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-utils/src/config.rs +0 -0
  134. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-utils/src/lib.rs +0 -0
  135. {smbcloud_cli-0.3.39 → smbcloud_cli-0.3.41}/crates/smbcloud-utils/src/write_config.rs +0 -0
  136. {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.39"
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.39"
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.39"
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.39"
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.39"
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.39"
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.39"
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.39"
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.39"
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.39"
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.39"
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.39"
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.39"
2661
+ version = "0.3.41"
2662
2662
  dependencies = [
2663
2663
  "anyhow",
2664
2664
  "dirs",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: smbcloud-cli
3
- Version: 0.3.39
3
+ Version: 0.3.41
4
4
  Classifier: Development Status :: 4 - Beta
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -1,6 +1,6 @@
1
1
  [package]
2
2
  name = "smbcloud-cli"
3
- version = "0.3.39"
3
+ version = "0.3.41"
4
4
  edition = "2021"
5
5
  authors = ["Seto Elkahfi <hej@setoelkahfi.se>"]
6
6
  description = "smbCloud command line interface."
@@ -22,7 +22,7 @@
22
22
 
23
23
  ## Installation
24
24
 
25
- One can install this program in different ways.
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
- Simply rerun the installation command.
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
- - Setup your Rust tooling.
81
+ - Set up your Rust tooling.
82
82
  - Clone the repo.
83
- - Provide the environment variables in the .env.local.
83
+ - Add the required environment variables to `.env.local`.
84
84
  - Run `cargo run`.
85
85
 
86
86
  ## Credits
87
87
 
88
- This repo is inspired by [Sugar](https://github.com/metaplex-foundation/sugar).
88
+ This repo draws inspiration from [Sugar](https://github.com/metaplex-foundation/sugar).
89
89
 
90
- This repo tries to follow [the 12 factor CLI app](https://medium.com/@jdxcode/12-factor-cli-apps-dd3c227a0e46) principles by
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!("Provide your login credentials.");
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
- // Spin up a simple localhost server to listen for the GitHub OAuth callback
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
- // Account not found and we show signup option
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
- // Account found but email not verified
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!("Failed to get token. Probably a backend issue.")),
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
- // What to do if not logged in with GitHub?
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
- // Logged in with GitHub!
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, &params).await;
170
163
  }
171
164
 
172
- Err(anyhow!("Shouldn't be here."))
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("Cancel operation.").green().bold().to_string(),
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("Doing nothing."),
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("Cancel operation."),
235
+ succeed_message("Cancelled."),
246
236
  );
247
237
  return Ok(CommandResult {
248
238
  spinner,
249
239
  symbol: succeed_symbol(),
250
- msg: succeed_message("Doing nothing."),
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!("Provide your login credentials.");
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!("Idk what happened."))
373
+ Err(anyhow!("The server returned an unexpected account state."))
386
374
  }
387
375
  }
388
376
  }
389
- None => Err(anyhow!("Shouldn't be here.")),
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!("Idk what happened."))
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("Cancel operation.").green().bold().to_string(),
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("Doing nothing."),
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("Cancel operation"),
32
+ succeed_message("Cancelled."),
34
33
  ),
35
34
  symbol: succeed_symbol(),
36
- msg: succeed_message("Doing nothing."),
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, or Package.swift found"
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, or Package.swift found",
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, or Package.swift found"
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)
@@ -5,6 +5,7 @@ mod known_hosts;
5
5
  pub mod process_deploy;
6
6
  pub mod process_deploy_nextjs_ssr;
7
7
  pub mod process_deploy_rails;
8
+ pub mod process_deploy_rust;
8
9
  pub mod process_deploy_vite_spa;
9
10
  mod remote_messages;
10
11
  pub(crate) mod rsync_deploy;
@@ -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