Skip to content

Commit b4688de

Browse files
committed
oauth login, /me fix
1 parent 276d72e commit b4688de

3 files changed

Lines changed: 18 additions & 8 deletions

File tree

src/cli/credentials.rs

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,6 @@ pub fn fetch_user_email(auth_url: &str, access_token: &str) -> Result<Option<Str
586586
}
587587

588588
let data: serde_json::Value = resp.json().unwrap_or(serde_json::Value::Null);
589-
// /oauth_server/api/me returns {"user": {"email": ...}}
590589
let email = data.get("email")
591590
.or_else(|| data.get("user").and_then(|u| u.get("email")))
592591
.and_then(|v| v.as_str())
@@ -1171,7 +1170,11 @@ mod tests {
11711170
domain: None,
11721171
};
11731172

1173+
// Isolate from the real ~/.config/stacker/config.yml which may provide a fallback URL.
1174+
let tmp = tempfile::tempdir().unwrap();
1175+
std::env::set_var("XDG_CONFIG_HOME", tmp.path());
11741176
let err = login(&manager, &oauth, &request).unwrap_err();
1177+
std::env::remove_var("XDG_CONFIG_HOME");
11751178
assert!(format!("{err}").contains("Missing auth URL"));
11761179
}
11771180

@@ -1188,7 +1191,11 @@ mod tests {
11881191
domain: None,
11891192
};
11901193

1194+
// Isolate from the real ~/.config/stacker/config.yml which may provide a fallback URL.
1195+
let tmp = tempfile::tempdir().unwrap();
1196+
std::env::set_var("XDG_CONFIG_HOME", tmp.path());
11911197
let err = login(&manager, &oauth, &request).unwrap_err();
1198+
std::env::remove_var("XDG_CONFIG_HOME");
11921199
assert!(format!("{err}").contains("Missing Stacker API URL"));
11931200
}
11941201

src/console/commands/cli/login.rs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,12 @@ impl LoginCommand {
2727
provider: Option<String>,
2828
user: Option<String>,
2929
) -> Self {
30-
let cfg = UserConfig::load();
3130
Self {
3231
org,
3332
domain,
3433
auth_url,
3534
server_url,
36-
browser: browser || cfg.browser_default(),
35+
browser, // raw flag only; browser_default() is applied in call()
3736
provider,
3837
user,
3938
}
@@ -118,7 +117,11 @@ impl LoginCommand {
118117
impl CallableTrait for LoginCommand {
119118
fn call(&self) -> Result<(), Box<dyn std::error::Error>> {
120119
// --user/-u always means email/password; skip prompt and browser.
121-
let use_browser = self.user.is_none() && (self.browser || io::stdin().is_terminal());
120+
// --browser flag forces browser; on a tty, browser_default() from config applies.
121+
// Piped stdin always falls back to email/password regardless of config.
122+
let use_browser = self.user.is_none() && (
123+
self.browser || (io::stdin().is_terminal() && UserConfig::load().browser_default())
124+
);
122125

123126
if use_browser {
124127
// Resolve provider — may show an interactive menu.

src/console/commands/cli/secrets.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1814,11 +1814,11 @@ mod tests {
18141814
}
18151815

18161816
#[test]
1817-
fn test_remote_server_target_requires_server_id() {
1817+
fn test_remote_server_target_allows_missing_server_id() {
1818+
// server_id may be omitted at parse time; it is resolved from the
1819+
// lock file at execution time via server_id_from_lock().
18181820
let target = RemoteSecretTarget::new(RemoteSecretScope::Server, None, None, None);
1819-
1820-
let error = target.validate().unwrap_err().to_string();
1821-
assert!(error.contains("--server-id"));
1821+
assert!(target.validate().is_ok());
18221822
}
18231823

18241824
#[test]

0 commit comments

Comments
 (0)