smbcloud-cli 0.4.10__tar.gz → 0.4.12__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.4.10 → smbcloud_cli-0.4.12}/Cargo.lock +16 -16
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/PKG-INFO +2 -2
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/Cargo.toml +2 -2
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/cli/mod.rs +11 -1
- smbcloud_cli-0.4.12/crates/cli/src/cloud-auth/auth_app.rs +85 -0
- smbcloud_cli-0.4.12/crates/cli/src/cloud-auth/cli.rs +38 -0
- smbcloud_cli-0.4.12/crates/cli/src/cloud-auth/mod.rs +6 -0
- smbcloud_cli-0.4.12/crates/cli/src/cloud-auth/process.rs +193 -0
- smbcloud_cli-0.4.12/crates/cli/src/cloud-auth/render.rs +45 -0
- smbcloud_cli-0.4.12/crates/cli/src/cloud-auth/url_builder.rs +28 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/process_migrate.rs +1 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/setup_create_new_project.rs +2 -0
- smbcloud_cli-0.4.12/crates/cli/src/cloud-mail/current_project.rs +24 -0
- smbcloud_cli-0.4.10/crates/cli/src/mail.rs → smbcloud_cli-0.4.12/crates/cli/src/cloud-mail/mod.rs +1 -1
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/lib.rs +6 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/main.rs +6 -0
- smbcloud_cli-0.4.12/crates/cli/src/mcp.rs +946 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/project/crud_create.rs +2 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/project/crud_delete.rs +15 -5
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/project/crud_read.rs +7 -33
- smbcloud_cli-0.4.12/crates/cli/src/session_config.rs +134 -0
- smbcloud_cli-0.4.12/crates/cli/src/tenant/cli.rs +34 -0
- smbcloud_cli-0.4.12/crates/cli/src/tenant/mod.rs +6 -0
- smbcloud_cli-0.4.12/crates/cli/src/tenant/process.rs +219 -0
- smbcloud_cli-0.4.12/crates/cli/src/tenant/render.rs +50 -0
- smbcloud_cli-0.4.12/crates/cli/src/tenant/request.rs +30 -0
- smbcloud_cli-0.4.12/crates/cli/src/tenant/tenant_client.rs +84 -0
- smbcloud_cli-0.4.12/crates/cli/src/tenant/url_builder.rs +21 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/prompt.rs +74 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/Cargo.toml +2 -2
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-deploy/Cargo.toml +2 -2
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-mail/Cargo.toml +2 -2
- smbcloud_cli-0.4.12/crates/smbcloud-mail/src/request.rs +30 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/Cargo.toml +2 -2
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/app_auth.rs +22 -3
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/lib.rs +1 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/project.rs +11 -2
- smbcloud_cli-0.4.12/crates/smbcloud-model/src/tenant.rs +121 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-network/Cargo.toml +2 -2
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-network/src/network.rs +10 -19
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking/Cargo.toml +2 -2
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/Cargo.toml +2 -2
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_project_create.rs +9 -1
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_project_delete.rs +3 -3
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/lib.rs +1 -0
- smbcloud_cli-0.4.12/crates/smbcloud-networking-project/src/request.rs +34 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-utils/Cargo.toml +2 -2
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-utils/src/lib.rs +2 -14
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/pyproject.toml +1 -1
- smbcloud_cli-0.4.10/crates/cli/src/mail/current_project.rs +0 -43
- smbcloud_cli-0.4.10/crates/cli/src/mcp.rs +0 -236
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/Cargo.toml +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/README.md +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/README.md +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/account/cli.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/account/forgot/mod.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/account/lib.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/account/login/mod.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/account/login/process.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/account/logout/mod.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/account/me/mod.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/account/mod.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/account/signup/mod.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/account/signup/process.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ci.rs +0 -0
- {smbcloud_cli-0.4.10/crates/smbcloud-mail/src → smbcloud_cli-0.4.12/crates/cli/src/cloud-auth}/request.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/config.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/git.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/mod.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/process_deploy.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/process_deploy_nextjs_ssr.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/process_deploy_rails.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/process_deploy_rust.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/process_deploy_swift.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/process_deploy_vite_spa.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/remote_messages.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/setup.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/setup_project.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/deploy → smbcloud_cli-0.4.12/crates/cli/src/cloud-deploy}/setup_select_project.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/mail → smbcloud_cli-0.4.12/crates/cli/src/cloud-mail}/cli.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/mail → smbcloud_cli-0.4.12/crates/cli/src/cloud-mail}/process.rs +0 -0
- {smbcloud_cli-0.4.10/crates/cli/src/mail → smbcloud_cli-0.4.12/crates/cli/src/cloud-mail}/render.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/interface.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/project/cli.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/project/crud_update.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/project/deploy_target.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/project/deployment.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/project/mod.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/project/process.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/token/clear_smb_token.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/token/get_smb_token.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/token/is_logged_in.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/token/mod.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/token/smb_token_file_path.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/confirm_dialog.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/deployment_detail_view.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/deployment_table.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/me_view.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/mod.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/plain.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/project_detail_view.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/project_table.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/reporter.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/cli/src/ui/theme.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/.gitignore +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/README.md +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/check_email.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/lib.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/login.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/logout.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/me.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/oauth/get_account_status.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/oauth/get_consent_url.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/oauth/get_profile.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/oauth/get_token.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/oauth/mod.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/oauth/provider.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/remove.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/resend_email_verification.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/resend_reset_password_instruction.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/reset_password.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-auth/src/signup.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-deploy/README.md +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-deploy/src/build.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-deploy/src/error.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-deploy/src/known_hosts.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-deploy/src/lib.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-deploy/src/report.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-deploy/src/runner.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-deploy/src/transport.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-mail/README.md +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-mail/src/mail_app.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-mail/src/mail_inbox.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-mail/src/mail_message.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-mail/src/smbcloud_mail.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-mail/src/url_builder.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/README.md +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/account.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/deploy_config.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/deploy_config_update.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/error_codes.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/forgot.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/frontend_app.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/login.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/mail.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/oauth.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/repository.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/reset_password_response.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/runner.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-model/src/signup.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-network/README.md +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-network/src/environment.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-network/src/lib.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking/README.md +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking/src/constants.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking/src/lib.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking/src/smb_client.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/README.md +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_deploy_repo_create.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_frontend_app_create.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_frontend_app_deploy_config.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_frontend_app_read.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_frontend_app_update_deploy_config.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_project_deployment_create.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_project_deployment_read.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_project_deployment_update.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_project_read.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/crud_project_update.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-networking-project/src/url_builder.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-utils/README.md +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-utils/src/config.rs +0 -0
- {smbcloud_cli-0.4.10 → smbcloud_cli-0.4.12}/crates/smbcloud-utils/src/write_config.rs +0 -0
|
@@ -2528,7 +2528,7 @@ checksum = "8ed6a63f02c8539c91a8685a86f4099661ba3da017932f6ebbea6de3f0fa7c90"
|
|
|
2528
2528
|
|
|
2529
2529
|
[[package]]
|
|
2530
2530
|
name = "smbcloud-auth"
|
|
2531
|
-
version = "0.4.
|
|
2531
|
+
version = "0.4.12"
|
|
2532
2532
|
dependencies = [
|
|
2533
2533
|
"log",
|
|
2534
2534
|
"reqwest",
|
|
@@ -2543,7 +2543,7 @@ dependencies = [
|
|
|
2543
2543
|
|
|
2544
2544
|
[[package]]
|
|
2545
2545
|
name = "smbcloud-auth-sdk"
|
|
2546
|
-
version = "0.4.
|
|
2546
|
+
version = "0.4.12"
|
|
2547
2547
|
dependencies = [
|
|
2548
2548
|
"base64",
|
|
2549
2549
|
"reqwest",
|
|
@@ -2558,7 +2558,7 @@ dependencies = [
|
|
|
2558
2558
|
|
|
2559
2559
|
[[package]]
|
|
2560
2560
|
name = "smbcloud-auth-sdk-py"
|
|
2561
|
-
version = "0.4.
|
|
2561
|
+
version = "0.4.12"
|
|
2562
2562
|
dependencies = [
|
|
2563
2563
|
"pyo3",
|
|
2564
2564
|
"pythonize",
|
|
@@ -2572,7 +2572,7 @@ dependencies = [
|
|
|
2572
2572
|
|
|
2573
2573
|
[[package]]
|
|
2574
2574
|
name = "smbcloud-auth-sdk-wasm"
|
|
2575
|
-
version = "0.4.
|
|
2575
|
+
version = "0.4.12"
|
|
2576
2576
|
dependencies = [
|
|
2577
2577
|
"serde-wasm-bindgen",
|
|
2578
2578
|
"smbcloud-auth-sdk",
|
|
@@ -2585,7 +2585,7 @@ dependencies = [
|
|
|
2585
2585
|
|
|
2586
2586
|
[[package]]
|
|
2587
2587
|
name = "smbcloud-cli"
|
|
2588
|
-
version = "0.4.
|
|
2588
|
+
version = "0.4.12"
|
|
2589
2589
|
dependencies = [
|
|
2590
2590
|
"anyhow",
|
|
2591
2591
|
"chrono",
|
|
@@ -2631,7 +2631,7 @@ dependencies = [
|
|
|
2631
2631
|
|
|
2632
2632
|
[[package]]
|
|
2633
2633
|
name = "smbcloud-deploy"
|
|
2634
|
-
version = "0.4.
|
|
2634
|
+
version = "0.4.12"
|
|
2635
2635
|
dependencies = [
|
|
2636
2636
|
"anyhow",
|
|
2637
2637
|
"smbcloud-model",
|
|
@@ -2643,7 +2643,7 @@ dependencies = [
|
|
|
2643
2643
|
|
|
2644
2644
|
[[package]]
|
|
2645
2645
|
name = "smbcloud-email-sdk"
|
|
2646
|
-
version = "0.4.
|
|
2646
|
+
version = "0.4.12"
|
|
2647
2647
|
dependencies = [
|
|
2648
2648
|
"anyhow",
|
|
2649
2649
|
"log",
|
|
@@ -2658,7 +2658,7 @@ dependencies = [
|
|
|
2658
2658
|
|
|
2659
2659
|
[[package]]
|
|
2660
2660
|
name = "smbcloud-gresiq"
|
|
2661
|
-
version = "0.4.
|
|
2661
|
+
version = "0.4.12"
|
|
2662
2662
|
dependencies = [
|
|
2663
2663
|
"native-tls",
|
|
2664
2664
|
"postgres-native-tls",
|
|
@@ -2672,7 +2672,7 @@ dependencies = [
|
|
|
2672
2672
|
|
|
2673
2673
|
[[package]]
|
|
2674
2674
|
name = "smbcloud-gresiq-sdk"
|
|
2675
|
-
version = "0.4.
|
|
2675
|
+
version = "0.4.12"
|
|
2676
2676
|
dependencies = [
|
|
2677
2677
|
"anyhow",
|
|
2678
2678
|
"log",
|
|
@@ -2686,7 +2686,7 @@ dependencies = [
|
|
|
2686
2686
|
|
|
2687
2687
|
[[package]]
|
|
2688
2688
|
name = "smbcloud-mail"
|
|
2689
|
-
version = "0.4.
|
|
2689
|
+
version = "0.4.12"
|
|
2690
2690
|
dependencies = [
|
|
2691
2691
|
"reqwest",
|
|
2692
2692
|
"serde",
|
|
@@ -2698,7 +2698,7 @@ dependencies = [
|
|
|
2698
2698
|
|
|
2699
2699
|
[[package]]
|
|
2700
2700
|
name = "smbcloud-model"
|
|
2701
|
-
version = "0.4.
|
|
2701
|
+
version = "0.4.12"
|
|
2702
2702
|
dependencies = [
|
|
2703
2703
|
"chrono",
|
|
2704
2704
|
"log",
|
|
@@ -2714,7 +2714,7 @@ dependencies = [
|
|
|
2714
2714
|
|
|
2715
2715
|
[[package]]
|
|
2716
2716
|
name = "smbcloud-network"
|
|
2717
|
-
version = "0.4.
|
|
2717
|
+
version = "0.4.12"
|
|
2718
2718
|
dependencies = [
|
|
2719
2719
|
"clap 4.6.2",
|
|
2720
2720
|
"log",
|
|
@@ -2727,7 +2727,7 @@ dependencies = [
|
|
|
2727
2727
|
|
|
2728
2728
|
[[package]]
|
|
2729
2729
|
name = "smbcloud-networking"
|
|
2730
|
-
version = "0.4.
|
|
2730
|
+
version = "0.4.12"
|
|
2731
2731
|
dependencies = [
|
|
2732
2732
|
"smbcloud-network",
|
|
2733
2733
|
"url-builder",
|
|
@@ -2735,7 +2735,7 @@ dependencies = [
|
|
|
2735
2735
|
|
|
2736
2736
|
[[package]]
|
|
2737
2737
|
name = "smbcloud-networking-project"
|
|
2738
|
-
version = "0.4.
|
|
2738
|
+
version = "0.4.12"
|
|
2739
2739
|
dependencies = [
|
|
2740
2740
|
"anyhow",
|
|
2741
2741
|
"async-trait",
|
|
@@ -2753,11 +2753,11 @@ dependencies = [
|
|
|
2753
2753
|
|
|
2754
2754
|
[[package]]
|
|
2755
2755
|
name = "smbcloud-s6n"
|
|
2756
|
-
version = "0.4.
|
|
2756
|
+
version = "0.4.12"
|
|
2757
2757
|
|
|
2758
2758
|
[[package]]
|
|
2759
2759
|
name = "smbcloud-utils"
|
|
2760
|
-
version = "0.4.
|
|
2760
|
+
version = "0.4.12"
|
|
2761
2761
|
dependencies = [
|
|
2762
2762
|
"anyhow",
|
|
2763
2763
|
"dirs",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: smbcloud-cli
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.12
|
|
4
4
|
Classifier: Development Status :: 4 - Beta
|
|
5
5
|
Classifier: Environment :: Console
|
|
6
6
|
Classifier: Intended Audience :: Developers
|
|
@@ -15,7 +15,7 @@ Classifier: Topic :: System :: Systems Administration
|
|
|
15
15
|
Classifier: Topic :: Utilities
|
|
16
16
|
Summary: smbCloud command line interface.
|
|
17
17
|
Keywords: cli,cloud,smbcloud,web2,web3
|
|
18
|
-
Author-email: Seto Elkahfi <
|
|
18
|
+
Author-email: Seto Elkahfi <seto@smbcloud.xyz>
|
|
19
19
|
License: Apache-2.0
|
|
20
20
|
Requires-Python: >=3.8
|
|
21
21
|
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
[package]
|
|
2
2
|
name = "smbcloud-cli"
|
|
3
|
-
version = "0.4.
|
|
3
|
+
version = "0.4.12"
|
|
4
4
|
edition = "2021"
|
|
5
|
-
authors = ["Seto Elkahfi <
|
|
5
|
+
authors = ["Seto Elkahfi <seto@smbcloud.xyz>"]
|
|
6
6
|
description = "smbCloud command line interface."
|
|
7
7
|
license = "Apache-2.0"
|
|
8
8
|
repository = "https://github.com/smbcloudXYZ/smbcloud-cli"
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
use {
|
|
2
|
-
crate::{account, mail, project},
|
|
2
|
+
crate::{account, cloud_auth, mail, project, tenant},
|
|
3
3
|
clap::{Parser, Subcommand},
|
|
4
4
|
smbcloud_network::environment::Environment,
|
|
5
5
|
spinners::Spinner,
|
|
@@ -81,11 +81,21 @@ pub enum Commands {
|
|
|
81
81
|
#[clap(subcommand)]
|
|
82
82
|
command: project::cli::Commands,
|
|
83
83
|
},
|
|
84
|
+
#[clap(about = "Manage your tenants.")]
|
|
85
|
+
Tenant {
|
|
86
|
+
#[clap(subcommand)]
|
|
87
|
+
command: tenant::cli::Commands,
|
|
88
|
+
},
|
|
84
89
|
#[clap(about = "Manage smbCloud Mail.")]
|
|
85
90
|
Mail {
|
|
86
91
|
#[clap(subcommand)]
|
|
87
92
|
command: mail::cli::Commands,
|
|
88
93
|
},
|
|
94
|
+
#[clap(about = "Manage smbCloud Auth apps.")]
|
|
95
|
+
Auth {
|
|
96
|
+
#[clap(subcommand)]
|
|
97
|
+
command: cloud_auth::cli::Commands,
|
|
98
|
+
},
|
|
89
99
|
#[clap(
|
|
90
100
|
about = "Migrate local .smb/config.toml deploy fields to the smbCloud server.",
|
|
91
101
|
display_order = 4
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
use crate::cloud_auth::{
|
|
2
|
+
request::request_empty,
|
|
3
|
+
url_builder::{build_auth_app_url, build_auth_apps_url},
|
|
4
|
+
};
|
|
5
|
+
use reqwest::Client;
|
|
6
|
+
use serde::Serialize;
|
|
7
|
+
use smbcloud_model::{
|
|
8
|
+
app_auth::{AuthApp, AuthAppCreate, AuthAppUpdate},
|
|
9
|
+
error_codes::ErrorResponse,
|
|
10
|
+
};
|
|
11
|
+
use smbcloud_network::{environment::Environment, network::request};
|
|
12
|
+
use smbcloud_networking::{constants::SMB_USER_AGENT, smb_client::SmbClient};
|
|
13
|
+
|
|
14
|
+
#[derive(Serialize)]
|
|
15
|
+
struct AuthAppEnvelope<T> {
|
|
16
|
+
auth_app: T,
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
pub async fn get_auth_apps(
|
|
20
|
+
env: Environment,
|
|
21
|
+
client: (&SmbClient, &str),
|
|
22
|
+
access_token: String,
|
|
23
|
+
project_id: Option<String>,
|
|
24
|
+
) -> Result<Vec<AuthApp>, ErrorResponse> {
|
|
25
|
+
let builder = Client::new()
|
|
26
|
+
.get(build_auth_apps_url(env, client, project_id.as_deref()))
|
|
27
|
+
.header("Authorization", access_token)
|
|
28
|
+
.header("User-agent", SMB_USER_AGENT);
|
|
29
|
+
request(builder).await
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
pub async fn get_auth_app(
|
|
33
|
+
env: Environment,
|
|
34
|
+
client: (&SmbClient, &str),
|
|
35
|
+
access_token: String,
|
|
36
|
+
auth_app_id: String,
|
|
37
|
+
) -> Result<AuthApp, ErrorResponse> {
|
|
38
|
+
let builder = Client::new()
|
|
39
|
+
.get(build_auth_app_url(env, client, &auth_app_id))
|
|
40
|
+
.header("Authorization", access_token)
|
|
41
|
+
.header("User-agent", SMB_USER_AGENT);
|
|
42
|
+
request(builder).await
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
pub async fn create_auth_app(
|
|
46
|
+
env: Environment,
|
|
47
|
+
client: (&SmbClient, &str),
|
|
48
|
+
access_token: String,
|
|
49
|
+
auth_app: AuthAppCreate,
|
|
50
|
+
) -> Result<AuthApp, ErrorResponse> {
|
|
51
|
+
let builder = Client::new()
|
|
52
|
+
.post(build_auth_apps_url(env, client, None))
|
|
53
|
+
.json(&AuthAppEnvelope { auth_app })
|
|
54
|
+
.header("Authorization", access_token)
|
|
55
|
+
.header("User-agent", SMB_USER_AGENT);
|
|
56
|
+
request(builder).await
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
pub async fn update_auth_app(
|
|
60
|
+
env: Environment,
|
|
61
|
+
client: (&SmbClient, &str),
|
|
62
|
+
access_token: String,
|
|
63
|
+
auth_app_id: String,
|
|
64
|
+
auth_app: AuthAppUpdate,
|
|
65
|
+
) -> Result<AuthApp, ErrorResponse> {
|
|
66
|
+
let builder = Client::new()
|
|
67
|
+
.put(build_auth_app_url(env, client, &auth_app_id))
|
|
68
|
+
.json(&AuthAppEnvelope { auth_app })
|
|
69
|
+
.header("Authorization", access_token)
|
|
70
|
+
.header("User-agent", SMB_USER_AGENT);
|
|
71
|
+
request(builder).await
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
pub async fn delete_auth_app(
|
|
75
|
+
env: Environment,
|
|
76
|
+
client: (&SmbClient, &str),
|
|
77
|
+
access_token: String,
|
|
78
|
+
auth_app_id: String,
|
|
79
|
+
) -> Result<(), ErrorResponse> {
|
|
80
|
+
let builder = Client::new()
|
|
81
|
+
.delete(build_auth_app_url(env, client, &auth_app_id))
|
|
82
|
+
.header("Authorization", access_token)
|
|
83
|
+
.header("User-agent", SMB_USER_AGENT);
|
|
84
|
+
request_empty(builder).await
|
|
85
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
use clap::Subcommand;
|
|
2
|
+
|
|
3
|
+
#[derive(Subcommand)]
|
|
4
|
+
pub enum Commands {
|
|
5
|
+
#[clap(about = "List your Auth apps.")]
|
|
6
|
+
List {
|
|
7
|
+
#[clap(long)]
|
|
8
|
+
project_id: Option<String>,
|
|
9
|
+
},
|
|
10
|
+
#[clap(about = "Show an Auth app.")]
|
|
11
|
+
Show {
|
|
12
|
+
#[clap(long, required = true)]
|
|
13
|
+
id: String,
|
|
14
|
+
},
|
|
15
|
+
#[clap(about = "Create an Auth app.")]
|
|
16
|
+
New {
|
|
17
|
+
#[clap(long, required = true)]
|
|
18
|
+
name: String,
|
|
19
|
+
#[clap(long)]
|
|
20
|
+
project_id: Option<String>,
|
|
21
|
+
#[clap(long)]
|
|
22
|
+
support_email: Option<String>,
|
|
23
|
+
},
|
|
24
|
+
#[clap(about = "Update an Auth app.")]
|
|
25
|
+
Update {
|
|
26
|
+
#[clap(long, required = true)]
|
|
27
|
+
id: String,
|
|
28
|
+
#[clap(long)]
|
|
29
|
+
name: Option<String>,
|
|
30
|
+
#[clap(long)]
|
|
31
|
+
support_email: Option<String>,
|
|
32
|
+
},
|
|
33
|
+
#[clap(about = "Delete an Auth app.")]
|
|
34
|
+
Delete {
|
|
35
|
+
#[clap(long, required = true)]
|
|
36
|
+
id: String,
|
|
37
|
+
},
|
|
38
|
+
}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
use crate::{
|
|
2
|
+
cli::CommandResult,
|
|
3
|
+
client,
|
|
4
|
+
cloud_auth::{
|
|
5
|
+
auth_app::{
|
|
6
|
+
create_auth_app, delete_auth_app, get_auth_app, get_auth_apps, update_auth_app,
|
|
7
|
+
},
|
|
8
|
+
cli::Commands,
|
|
9
|
+
render::{print_auth_app_detail, print_auth_apps},
|
|
10
|
+
},
|
|
11
|
+
mail::current_project::{resolve_optional_project_id, resolve_required_project_id},
|
|
12
|
+
token::get_smb_token::get_smb_token,
|
|
13
|
+
ui::{fail_message, fail_symbol, prompt::confirm_delete, succeed_message, succeed_symbol},
|
|
14
|
+
};
|
|
15
|
+
use anyhow::{anyhow, Result};
|
|
16
|
+
use smbcloud_model::app_auth::{AuthAppCreate, AuthAppUpdate};
|
|
17
|
+
use smbcloud_network::environment::Environment;
|
|
18
|
+
use spinners::Spinner;
|
|
19
|
+
|
|
20
|
+
pub async fn process_cloud_auth(env: Environment, commands: Commands) -> Result<CommandResult> {
|
|
21
|
+
match commands {
|
|
22
|
+
Commands::List { project_id } => process_auth_app_list(env, project_id).await,
|
|
23
|
+
Commands::Show { id } => process_auth_app_show(env, id).await,
|
|
24
|
+
Commands::New {
|
|
25
|
+
name,
|
|
26
|
+
project_id,
|
|
27
|
+
support_email,
|
|
28
|
+
} => process_auth_app_new(env, name, project_id, support_email).await,
|
|
29
|
+
Commands::Update {
|
|
30
|
+
id,
|
|
31
|
+
name,
|
|
32
|
+
support_email,
|
|
33
|
+
} => process_auth_app_update(env, id, name, support_email).await,
|
|
34
|
+
Commands::Delete { id } => process_auth_app_delete(env, id).await,
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async fn process_auth_app_list(
|
|
39
|
+
env: Environment,
|
|
40
|
+
project_id: Option<String>,
|
|
41
|
+
) -> Result<CommandResult> {
|
|
42
|
+
let access_token = get_smb_token(env)?;
|
|
43
|
+
let resolved_project_id = resolve_optional_project_id(env, normalize_optional(project_id))?;
|
|
44
|
+
let mut spinner = loading_spinner("Loading Auth apps");
|
|
45
|
+
|
|
46
|
+
let auth_apps = get_auth_apps(env, client(), access_token, resolved_project_id)
|
|
47
|
+
.await
|
|
48
|
+
.map_err(api_error)?;
|
|
49
|
+
|
|
50
|
+
spinner.stop_and_persist(&succeed_symbol(), succeed_message("Loaded."));
|
|
51
|
+
print_auth_apps(&auth_apps);
|
|
52
|
+
|
|
53
|
+
Ok(done_result(if auth_apps.is_empty() {
|
|
54
|
+
"No Auth apps found."
|
|
55
|
+
} else {
|
|
56
|
+
"Done."
|
|
57
|
+
}))
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
async fn process_auth_app_show(env: Environment, id: String) -> Result<CommandResult> {
|
|
61
|
+
let access_token = get_smb_token(env)?;
|
|
62
|
+
let auth_app_id = normalize_required("Auth app id", id)?;
|
|
63
|
+
let mut spinner = loading_spinner("Loading Auth app");
|
|
64
|
+
|
|
65
|
+
let auth_app = get_auth_app(env, client(), access_token, auth_app_id)
|
|
66
|
+
.await
|
|
67
|
+
.map_err(api_error)?;
|
|
68
|
+
|
|
69
|
+
spinner.stop_and_persist(&succeed_symbol(), succeed_message("Loaded."));
|
|
70
|
+
print_auth_app_detail(&auth_app);
|
|
71
|
+
|
|
72
|
+
Ok(done_result("Done."))
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async fn process_auth_app_new(
|
|
76
|
+
env: Environment,
|
|
77
|
+
name: String,
|
|
78
|
+
project_id: Option<String>,
|
|
79
|
+
support_email: Option<String>,
|
|
80
|
+
) -> Result<CommandResult> {
|
|
81
|
+
let access_token = get_smb_token(env)?;
|
|
82
|
+
let auth_app = AuthAppCreate {
|
|
83
|
+
name: normalize_required("name", name)?,
|
|
84
|
+
project_id: resolve_required_project_id(env, normalize_optional(project_id))?,
|
|
85
|
+
support_email: normalize_optional(support_email),
|
|
86
|
+
};
|
|
87
|
+
let mut spinner = loading_spinner("Creating Auth app");
|
|
88
|
+
|
|
89
|
+
let auth_app = create_auth_app(env, client(), access_token, auth_app)
|
|
90
|
+
.await
|
|
91
|
+
.map_err(api_error)?;
|
|
92
|
+
|
|
93
|
+
spinner.stop_and_persist(&succeed_symbol(), succeed_message("Created."));
|
|
94
|
+
print_auth_app_detail(&auth_app);
|
|
95
|
+
|
|
96
|
+
Ok(done_result("Auth app created."))
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
async fn process_auth_app_update(
|
|
100
|
+
env: Environment,
|
|
101
|
+
id: String,
|
|
102
|
+
name: Option<String>,
|
|
103
|
+
support_email: Option<String>,
|
|
104
|
+
) -> Result<CommandResult> {
|
|
105
|
+
let access_token = get_smb_token(env)?;
|
|
106
|
+
let auth_app_id = normalize_required("Auth app id", id)?;
|
|
107
|
+
let update = AuthAppUpdate {
|
|
108
|
+
name: normalize_optional(name),
|
|
109
|
+
support_email: normalize_optional(support_email),
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
if update.is_empty() {
|
|
113
|
+
return Err(anyhow!(
|
|
114
|
+
"Specify at least one of `--name` or `--support-email`."
|
|
115
|
+
));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
let mut spinner = loading_spinner("Updating Auth app");
|
|
119
|
+
let auth_app = update_auth_app(env, client(), access_token, auth_app_id, update)
|
|
120
|
+
.await
|
|
121
|
+
.map_err(api_error)?;
|
|
122
|
+
|
|
123
|
+
spinner.stop_and_persist(&succeed_symbol(), succeed_message("Updated."));
|
|
124
|
+
print_auth_app_detail(&auth_app);
|
|
125
|
+
|
|
126
|
+
Ok(done_result("Auth app updated."))
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
async fn process_auth_app_delete(env: Environment, id: String) -> Result<CommandResult> {
|
|
130
|
+
let auth_app_id = normalize_required("Auth app id", id)?;
|
|
131
|
+
let confirmed = confirm_delete(
|
|
132
|
+
"Auth app deletion confirmation",
|
|
133
|
+
&format!("Delete Auth app #{auth_app_id}"),
|
|
134
|
+
)?;
|
|
135
|
+
|
|
136
|
+
if !confirmed {
|
|
137
|
+
return Ok(done_result("Cancelled."));
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
let access_token = get_smb_token(env)?;
|
|
141
|
+
let spinner = loading_spinner("Deleting Auth app");
|
|
142
|
+
|
|
143
|
+
match delete_auth_app(env, client(), access_token, auth_app_id).await {
|
|
144
|
+
Ok(()) => Ok(CommandResult {
|
|
145
|
+
spinner,
|
|
146
|
+
symbol: succeed_symbol(),
|
|
147
|
+
msg: succeed_message("Done. Auth app has been deleted."),
|
|
148
|
+
}),
|
|
149
|
+
Err(error) => Ok(CommandResult {
|
|
150
|
+
spinner,
|
|
151
|
+
symbol: fail_symbol(),
|
|
152
|
+
msg: fail_message(&error.to_string()),
|
|
153
|
+
}),
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
fn loading_spinner(message: &str) -> Spinner {
|
|
158
|
+
Spinner::new(
|
|
159
|
+
spinners::Spinners::SimpleDotsScrolling,
|
|
160
|
+
succeed_message(message),
|
|
161
|
+
)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
fn done_result(message: &str) -> CommandResult {
|
|
165
|
+
CommandResult {
|
|
166
|
+
spinner: loading_spinner("Done"),
|
|
167
|
+
symbol: succeed_symbol(),
|
|
168
|
+
msg: succeed_message(message),
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
fn normalize_required(label: &str, value: String) -> Result<String> {
|
|
173
|
+
let normalized_value = value.trim().to_string();
|
|
174
|
+
if normalized_value.is_empty() {
|
|
175
|
+
return Err(anyhow!("{} cannot be empty.", label));
|
|
176
|
+
}
|
|
177
|
+
Ok(normalized_value)
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
fn normalize_optional(value: Option<String>) -> Option<String> {
|
|
181
|
+
value.and_then(|value| {
|
|
182
|
+
let normalized_value = value.trim().to_string();
|
|
183
|
+
if normalized_value.is_empty() {
|
|
184
|
+
None
|
|
185
|
+
} else {
|
|
186
|
+
Some(normalized_value)
|
|
187
|
+
}
|
|
188
|
+
})
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
fn api_error(error: impl std::fmt::Display) -> anyhow::Error {
|
|
192
|
+
anyhow!(error.to_string())
|
|
193
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
use console::style;
|
|
2
|
+
use smbcloud_model::app_auth::AuthApp;
|
|
3
|
+
|
|
4
|
+
fn print_heading(title: &str) {
|
|
5
|
+
println!("\n{}", style(title).bold().underlined());
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
fn print_field(label: &str, value: impl AsRef<str>) {
|
|
9
|
+
println!("{} {}", style(format!("{label}:")).cyan(), value.as_ref());
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
fn print_optional_field(label: &str, value: Option<&str>) {
|
|
13
|
+
if let Some(value) = value {
|
|
14
|
+
print_field(label, value);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
pub(crate) fn print_auth_apps(auth_apps: &[AuthApp]) {
|
|
19
|
+
print_heading("Auth apps");
|
|
20
|
+
|
|
21
|
+
if auth_apps.is_empty() {
|
|
22
|
+
println!("No Auth apps found.");
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
for auth_app in auth_apps {
|
|
27
|
+
println!(
|
|
28
|
+
"#{} {} project={}",
|
|
29
|
+
auth_app.id,
|
|
30
|
+
style(&auth_app.name).bold(),
|
|
31
|
+
auth_app.project_id.as_deref().unwrap_or("-")
|
|
32
|
+
);
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
pub(crate) fn print_auth_app_detail(auth_app: &AuthApp) {
|
|
37
|
+
print_heading("Auth app");
|
|
38
|
+
print_field("ID", &auth_app.id);
|
|
39
|
+
print_field("Name", &auth_app.name);
|
|
40
|
+
print_optional_field("Project ID", auth_app.project_id.as_deref());
|
|
41
|
+
print_optional_field("Support email", auth_app.support_email.as_deref());
|
|
42
|
+
print_optional_field("Secret", auth_app.secret.as_deref());
|
|
43
|
+
print_field("Created at", auth_app.created_at.to_rfc3339());
|
|
44
|
+
print_field("Updated at", auth_app.updated_at.to_rfc3339());
|
|
45
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
use {
|
|
2
|
+
smbcloud_network::environment::Environment,
|
|
3
|
+
smbcloud_networking::{smb_base_url_builder, smb_client::SmbClient},
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
pub(crate) fn build_auth_apps_url(
|
|
7
|
+
env: Environment,
|
|
8
|
+
client: (&SmbClient, &str),
|
|
9
|
+
project_id: Option<&str>,
|
|
10
|
+
) -> String {
|
|
11
|
+
let mut url_builder = smb_base_url_builder(env, client);
|
|
12
|
+
url_builder.add_route("v1/auth_apps");
|
|
13
|
+
if let Some(project_id) = project_id {
|
|
14
|
+
url_builder.add_param("project_id", project_id);
|
|
15
|
+
}
|
|
16
|
+
url_builder.build()
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
pub(crate) fn build_auth_app_url(
|
|
20
|
+
env: Environment,
|
|
21
|
+
client: (&SmbClient, &str),
|
|
22
|
+
auth_app_id: &str,
|
|
23
|
+
) -> String {
|
|
24
|
+
let mut url_builder = smb_base_url_builder(env, client);
|
|
25
|
+
url_builder.add_route("v1/auth_apps");
|
|
26
|
+
url_builder.add_route(auth_app_id);
|
|
27
|
+
url_builder.build()
|
|
28
|
+
}
|
|
@@ -111,11 +111,13 @@ pub(crate) async fn create_new_project(
|
|
|
111
111
|
}
|
|
112
112
|
};
|
|
113
113
|
|
|
114
|
+
let tenant_id = crate::session_config::current_tenant_id(env).unwrap_or(None);
|
|
114
115
|
let project = create_project(
|
|
115
116
|
env,
|
|
116
117
|
client(),
|
|
117
118
|
access_token.clone(),
|
|
118
119
|
ProjectCreate { name, description },
|
|
120
|
+
tenant_id,
|
|
119
121
|
)
|
|
120
122
|
.await?;
|
|
121
123
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
use anyhow::{anyhow, Result};
|
|
2
|
+
use smbcloud_network::environment::Environment;
|
|
3
|
+
|
|
4
|
+
pub(crate) fn resolve_optional_project_id(
|
|
5
|
+
env: Environment,
|
|
6
|
+
project_id: Option<String>,
|
|
7
|
+
) -> Result<Option<String>> {
|
|
8
|
+
match project_id {
|
|
9
|
+
Some(project_id) => Ok(Some(project_id)),
|
|
10
|
+
None => crate::session_config::current_project_id(env),
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
pub(crate) fn resolve_required_project_id(
|
|
15
|
+
env: Environment,
|
|
16
|
+
project_id: Option<String>,
|
|
17
|
+
) -> Result<String> {
|
|
18
|
+
match resolve_optional_project_id(env, project_id)? {
|
|
19
|
+
Some(project_id) => Ok(project_id),
|
|
20
|
+
None => Err(anyhow!(
|
|
21
|
+
"No project selected. Pass `--project-id` or run `smb project use --id <project-id>`."
|
|
22
|
+
)),
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -3,11 +3,17 @@ use smbcloud_networking::smb_client::SmbClient;
|
|
|
3
3
|
pub mod account;
|
|
4
4
|
pub mod ci;
|
|
5
5
|
pub mod cli;
|
|
6
|
+
#[path = "cloud-auth/mod.rs"]
|
|
7
|
+
pub mod cloud_auth;
|
|
8
|
+
#[path = "cloud-deploy/mod.rs"]
|
|
6
9
|
pub mod deploy;
|
|
7
10
|
pub mod interface;
|
|
11
|
+
#[path = "cloud-mail/mod.rs"]
|
|
8
12
|
pub mod mail;
|
|
9
13
|
pub mod mcp;
|
|
10
14
|
pub mod project;
|
|
15
|
+
mod session_config;
|
|
16
|
+
pub mod tenant;
|
|
11
17
|
mod token;
|
|
12
18
|
pub mod ui;
|
|
13
19
|
|