Skip to content

Commit fb5de22

Browse files
authored
auth: use the globally constructed client builder (#16979)
## Summary Instead of each subcommand instantiating its own `BaseClientBuilder`, let's use the globally constructed one. ## Test Plan Existing tests.
1 parent 0c5391a commit fb5de22

File tree

6 files changed

+29
-104
lines changed

6 files changed

+29
-104
lines changed

crates/uv/src/commands/auth/helper.rs

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use uv_preview::{Preview, PreviewFeatures};
1212
use uv_redacted::DisplaySafeUrl;
1313
use uv_warnings::warn_user;
1414

15-
use crate::{commands::ExitStatus, printer::Printer, settings::NetworkSettings};
15+
use crate::{commands::ExitStatus, printer::Printer};
1616

1717
/// Request format for the Bazel credential helper protocol.
1818
#[derive(Debug, Deserialize)]
@@ -60,8 +60,8 @@ impl TryFrom<Credentials> for BazelCredentialResponse {
6060

6161
async fn credentials_for_url(
6262
url: &DisplaySafeUrl,
63+
client_builder: BaseClientBuilder<'_>,
6364
preview: Preview,
64-
network_settings: &NetworkSettings,
6565
) -> Result<Option<Credentials>> {
6666
let pyx_store = PyxTokenStore::from_settings()?;
6767

@@ -85,16 +85,9 @@ async fn credentials_for_url(
8585
.unwrap_or(url.to_string())
8686
);
8787
}
88-
let client = BaseClientBuilder::new(
89-
network_settings.connectivity,
90-
network_settings.native_tls,
91-
network_settings.allow_insecure_host.clone(),
92-
preview,
93-
network_settings.timeout,
94-
network_settings.retries,
95-
)
96-
.auth_integration(uv_client::AuthIntegration::NoAuthMiddleware)
97-
.build();
88+
let client = client_builder
89+
.auth_integration(uv_client::AuthIntegration::NoAuthMiddleware)
90+
.build();
9891
let token = pyx_store
9992
.access_token(client.for_host(pyx_store.api()).raw_client(), 0)
10093
.await
@@ -123,8 +116,8 @@ async fn credentials_for_url(
123116
///
124117
/// Full spec is [available here](https://github.com/bazelbuild/proposals/blob/main/designs/2022-06-07-bazel-credential-helpers.md)
125118
pub(crate) async fn helper(
119+
client_builder: BaseClientBuilder<'_>,
126120
preview: Preview,
127-
network_settings: &NetworkSettings,
128121
printer: Printer,
129122
) -> Result<ExitStatus> {
130123
if !preview.is_enabled(PreviewFeatures::AUTH_HELPER) {
@@ -138,7 +131,7 @@ pub(crate) async fn helper(
138131

139132
// TODO: make this logic generic over the protocol by providing `request.uri` from a
140133
// trait - that should help with adding new protocols
141-
let credentials = credentials_for_url(&request.uri, preview, network_settings).await?;
134+
let credentials = credentials_for_url(&request.uri, client_builder, preview).await?;
142135

143136
let response = serde_json::to_string(
144137
&credentials

crates/uv/src/commands/auth/login.rs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use uv_preview::Preview;
1717

1818
use crate::commands::ExitStatus;
1919
use crate::printer::Printer;
20-
use crate::settings::NetworkSettings;
2120

2221
// We retry no more than this many times when polling for login status.
2322
const STATUS_RETRY_LIMIT: u32 = 60;
@@ -28,7 +27,7 @@ pub(crate) async fn login(
2827
username: Option<String>,
2928
password: Option<String>,
3029
token: Option<String>,
31-
network_settings: &NetworkSettings,
30+
client_builder: BaseClientBuilder<'_>,
3231
printer: Printer,
3332
preview: Preview,
3433
) -> Result<ExitStatus> {
@@ -41,16 +40,9 @@ pub(crate) async fn login(
4140
bail!("Cannot specify a password when logging in to pyx");
4241
}
4342

44-
let client = BaseClientBuilder::new(
45-
network_settings.connectivity,
46-
network_settings.native_tls,
47-
network_settings.allow_insecure_host.clone(),
48-
preview,
49-
network_settings.timeout,
50-
network_settings.retries,
51-
)
52-
.auth_integration(AuthIntegration::NoAuthMiddleware)
53-
.build();
43+
let client = client_builder
44+
.auth_integration(AuthIntegration::NoAuthMiddleware)
45+
.build();
5446

5547
let access_token = pyx_login_with_browser(&pyx_store, &client, &printer).await?;
5648
let jwt = PyxJwt::decode(&access_token)?;

crates/uv/src/commands/auth/logout.rs

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ use uv_distribution_types::IndexUrl;
99
use uv_pep508::VerbatimUrl;
1010
use uv_preview::Preview;
1111

12-
use crate::settings::NetworkSettings;
1312
use crate::{commands::ExitStatus, printer::Printer};
1413

1514
/// Logout from a service.
@@ -18,13 +17,13 @@ use crate::{commands::ExitStatus, printer::Printer};
1817
pub(crate) async fn logout(
1918
service: Service,
2019
username: Option<String>,
21-
network_settings: &NetworkSettings,
20+
client_builder: BaseClientBuilder<'_>,
2221
printer: Printer,
2322
preview: Preview,
2423
) -> Result<ExitStatus> {
2524
let pyx_store = PyxTokenStore::from_settings()?;
2625
if pyx_store.is_known_domain(service.url()) {
27-
return pyx_logout(&pyx_store, network_settings, printer, preview).await;
26+
return pyx_logout(&pyx_store, client_builder, printer).await;
2827
}
2928

3029
let backend = AuthBackend::from_settings(preview).await?;
@@ -93,20 +92,11 @@ pub(crate) async fn logout(
9392
/// Log out via the [`PyxTokenStore`], invalidating the existing tokens.
9493
async fn pyx_logout(
9594
store: &PyxTokenStore,
96-
network_settings: &NetworkSettings,
95+
client_builder: BaseClientBuilder<'_>,
9796
printer: Printer,
98-
preview: Preview,
9997
) -> Result<ExitStatus> {
10098
// Initialize the client.
101-
let client = BaseClientBuilder::new(
102-
network_settings.connectivity,
103-
network_settings.native_tls,
104-
network_settings.allow_insecure_host.clone(),
105-
preview,
106-
network_settings.timeout,
107-
network_settings.retries,
108-
)
109-
.build();
99+
let client = client_builder.build();
110100

111101
// Retrieve the token store.
112102
let Some(tokens) = store.read().await? else {

crates/uv/src/commands/auth/token.rs

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,12 @@ use uv_preview::Preview;
1111
use crate::commands::ExitStatus;
1212
use crate::commands::auth::login;
1313
use crate::printer::Printer;
14-
use crate::settings::NetworkSettings;
1514

1615
/// Show the token that will be used for a service.
1716
pub(crate) async fn token(
1817
service: Service,
1918
username: Option<String>,
20-
network_settings: &NetworkSettings,
19+
client_builder: BaseClientBuilder<'_>,
2120
printer: Printer,
2221
preview: Preview,
2322
) -> Result<ExitStatus> {
@@ -26,16 +25,9 @@ pub(crate) async fn token(
2625
if username.is_some() {
2726
bail!("Cannot specify a username when logging in to pyx");
2827
}
29-
let client = BaseClientBuilder::new(
30-
network_settings.connectivity,
31-
network_settings.native_tls,
32-
network_settings.allow_insecure_host.clone(),
33-
preview,
34-
network_settings.timeout,
35-
network_settings.retries,
36-
)
37-
.auth_integration(AuthIntegration::NoAuthMiddleware)
38-
.build();
28+
let client = client_builder
29+
.auth_integration(AuthIntegration::NoAuthMiddleware)
30+
.build();
3931

4032
pyx_refresh(&pyx_store, &client, printer).await?;
4133
return Ok(ExitStatus::Success);

crates/uv/src/lib.rs

Lines changed: 7 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -479,20 +479,15 @@ async fn run(mut cli: Cli) -> Result<ExitStatus> {
479479
command: AuthCommand::Login(args),
480480
}) => {
481481
// Resolve the settings from the command-line arguments and workspace configuration.
482-
let args = settings::AuthLoginSettings::resolve(
483-
args,
484-
&cli.top_level.global_args,
485-
filesystem.as_ref(),
486-
&environment,
487-
);
482+
let args = settings::AuthLoginSettings::resolve(args);
488483
show_settings!(args);
489484

490485
commands::auth_login(
491486
args.service,
492487
args.username,
493488
args.password,
494489
args.token,
495-
&args.network_settings,
490+
client_builder,
496491
printer,
497492
globals.preview,
498493
)
@@ -502,18 +497,13 @@ async fn run(mut cli: Cli) -> Result<ExitStatus> {
502497
command: AuthCommand::Logout(args),
503498
}) => {
504499
// Resolve the settings from the command-line arguments and workspace configuration.
505-
let args = settings::AuthLogoutSettings::resolve(
506-
args,
507-
&cli.top_level.global_args,
508-
filesystem.as_ref(),
509-
&environment,
510-
);
500+
let args = settings::AuthLogoutSettings::resolve(args);
511501
show_settings!(args);
512502

513503
commands::auth_logout(
514504
args.service,
515505
args.username,
516-
&args.network_settings,
506+
client_builder,
517507
printer,
518508
globals.preview,
519509
)
@@ -523,18 +513,13 @@ async fn run(mut cli: Cli) -> Result<ExitStatus> {
523513
command: AuthCommand::Token(args),
524514
}) => {
525515
// Resolve the settings from the command-line arguments and workspace configuration.
526-
let args = settings::AuthTokenSettings::resolve(
527-
args,
528-
&cli.top_level.global_args,
529-
filesystem.as_ref(),
530-
&environment,
531-
);
516+
let args = settings::AuthTokenSettings::resolve(args);
532517
show_settings!(args);
533518

534519
commands::auth_token(
535520
args.service,
536521
args.username,
537-
&args.network_settings,
522+
client_builder,
538523
printer,
539524
globals.preview,
540525
)
@@ -558,7 +543,7 @@ async fn run(mut cli: Cli) -> Result<ExitStatus> {
558543

559544
match args.command {
560545
AuthHelperCommand::Get => {
561-
commands::auth_helper(globals.preview, &globals.network_settings, printer).await
546+
commands::auth_helper(client_builder, globals.preview, printer).await
562547
}
563548
}
564549
}

crates/uv/src/settings.rs

Lines changed: 3 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3877,23 +3877,14 @@ impl PublishSettings {
38773877
pub(crate) struct AuthLogoutSettings {
38783878
pub(crate) service: Service,
38793879
pub(crate) username: Option<String>,
3880-
3881-
// Both CLI and configuration.
3882-
pub(crate) network_settings: NetworkSettings,
38833880
}
38843881

38853882
impl AuthLogoutSettings {
38863883
/// Resolve the [`AuthLogoutSettings`] from the CLI and filesystem configuration.
3887-
pub(crate) fn resolve(
3888-
args: AuthLogoutArgs,
3889-
global_args: &GlobalArgs,
3890-
filesystem: Option<&FilesystemOptions>,
3891-
environment: &EnvironmentOptions,
3892-
) -> Self {
3884+
pub(crate) fn resolve(args: AuthLogoutArgs) -> Self {
38933885
Self {
38943886
service: args.service,
38953887
username: args.username,
3896-
network_settings: NetworkSettings::resolve(global_args, filesystem, environment),
38973888
}
38983889
}
38993890
}
@@ -3903,23 +3894,14 @@ impl AuthLogoutSettings {
39033894
pub(crate) struct AuthTokenSettings {
39043895
pub(crate) service: Service,
39053896
pub(crate) username: Option<String>,
3906-
3907-
// Both CLI and configuration.
3908-
pub(crate) network_settings: NetworkSettings,
39093897
}
39103898

39113899
impl AuthTokenSettings {
39123900
/// Resolve the [`AuthTokenSettings`] from the CLI and filesystem configuration.
3913-
pub(crate) fn resolve(
3914-
args: AuthTokenArgs,
3915-
global_args: &GlobalArgs,
3916-
filesystem: Option<&FilesystemOptions>,
3917-
environment: &EnvironmentOptions,
3918-
) -> Self {
3901+
pub(crate) fn resolve(args: AuthTokenArgs) -> Self {
39193902
Self {
39203903
service: args.service,
39213904
username: args.username,
3922-
network_settings: NetworkSettings::resolve(global_args, filesystem, environment),
39233905
}
39243906
}
39253907
}
@@ -3931,25 +3913,16 @@ pub(crate) struct AuthLoginSettings {
39313913
pub(crate) username: Option<String>,
39323914
pub(crate) password: Option<String>,
39333915
pub(crate) token: Option<String>,
3934-
3935-
// Both CLI and configuration.
3936-
pub(crate) network_settings: NetworkSettings,
39373916
}
39383917

39393918
impl AuthLoginSettings {
39403919
/// Resolve the [`AuthLoginSettings`] from the CLI and filesystem configuration.
3941-
pub(crate) fn resolve(
3942-
args: AuthLoginArgs,
3943-
global_args: &GlobalArgs,
3944-
filesystem: Option<&FilesystemOptions>,
3945-
environment: &EnvironmentOptions,
3946-
) -> Self {
3920+
pub(crate) fn resolve(args: AuthLoginArgs) -> Self {
39473921
Self {
39483922
service: args.service,
39493923
username: args.username,
39503924
password: args.password,
39513925
token: args.token,
3952-
network_settings: NetworkSettings::resolve(global_args, filesystem, environment),
39533926
}
39543927
}
39553928
}

0 commit comments

Comments
 (0)