Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

login with browser using nonce #4057

Merged
merged 28 commits into from
Jul 11, 2023
Merged
Changes from 1 commit
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
3294714
login with browser using nonce
dynamite-bud Jul 6, 2023
1ec4740
implemented the top layer for logging in with a browser
dynamite-bud Jul 6, 2023
d10cadd
added browser functionality in main login command with --no-browser c…
dynamite-bud Jul 6, 2023
6ab96a8
made prompting for `do you want to open in browser`
dynamite-bud Jul 6, 2023
1facf8d
happy with the flow
dynamite-bud Jul 7, 2023
edc451c
cosmetic changes to input prompt
dynamite-bud Jul 7, 2023
6ca884b
cosmetic changes for log prompt
dynamite-bud Jul 7, 2023
49fd92b
ayush's reviewed changes
dynamite-bud Jul 7, 2023
30b7e75
already logged in message changed
dynamite-bud Jul 7, 2023
966c3f8
timeout implemented for 10 minutes
dynamite-bud Jul 7, 2023
e09c043
texts same as suggestions
dynamite-bud Jul 7, 2023
f7d55b5
Authorization with all states, cancel, timeout and success
dynamite-bud Jul 7, 2023
ebc99cd
http server switched to barebones hyper
dynamite-bud Jul 8, 2023
612fabd
ValidatedNonceOutput TokenStatus added
dynamite-bud Jul 8, 2023
ff13040
added quotes in login message
dynamite-bud Jul 8, 2023
70d676e
moved types to login
dynamite-bud Jul 9, 2023
e64411d
case where user pastes a token
dynamite-bud Jul 10, 2023
58bd969
doc suggestion
dynamite-bud Jul 10, 2023
ba3f1e8
new line after Cancelled
dynamite-bud Jul 10, 2023
d807e3f
multiply the numbers directly in timeout
dynamite-bud Jul 10, 2023
d8ddc21
Merge branch 'master' into cli-login-through-browser
syrusakbary Jul 10, 2023
15319ff
Message formatting for wrong token error
dynamite-bud Jul 10, 2023
5fc96b8
Merge branch 'cli-login-through-browser' of https://github.com/wasmer…
dynamite-bud Jul 10, 2023
85de7b4
warning message exchanged with error for wrong token
dynamite-bud Jul 10, 2023
8c3feac
newline after warning
dynamite-bud Jul 10, 2023
92472d0
Merge branch 'master' of https://github.com/wasmerio/wasmer into cli-…
dynamite-bud Jul 11, 2023
3eb3cf3
ignore the pure_webc_package test
dynamite-bud Jul 11, 2023
9d0027b
login_works test updated
dynamite-bud Jul 11, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 52 additions & 49 deletions lib/cli/src/commands/login.rs
Original file line number Diff line number Diff line change
Expand Up @@ -234,58 +234,61 @@ impl Login {
let env = self.wasmer_env();
let registry = env.registry_endpoint()?;

let person_wants_to_login =
match wasmer_registry::whoami(env.dir(), Some(registry.as_str()), None) {
std::result::Result::Ok((registry, user)) => {
println!(
"You are already logged in as {:?} on registry {:?}",
user, registry
);

#[cfg(not(test))]
{
let login_again = Input::new()
.with_prompt(format!(
"{} {} - [y/{}]",
style("?").yellow().bold(),
style("Do you want to login with another user?")
.bright()
.bold(),
style("N").green().bold()
))
.show_default(false)
.default(BoolPromptOptions::No)
.interact_text()?;

login_again == BoolPromptOptions::Yes
}
#[cfg(test)]
{
false
let auth_state = match self.token.clone() {
Some(token) => Ok(AuthorizationState::TokenSuccess(token)),
None => {
let person_wants_to_login =
match wasmer_registry::whoami(env.dir(), Some(registry.as_str()), None) {
std::result::Result::Ok((registry, user)) => {
println!(
"You are already logged in as {:?} on registry {:?}",
user, registry
);

#[cfg(not(test))]
{
let login_again = Input::new()
.with_prompt(format!(
"{} {} - [y/{}]",
style("?").yellow().bold(),
style("Do you want to login with another user?")
.bright()
.bold(),
style("N").green().bold()
))
.show_default(false)
.default(BoolPromptOptions::No)
.interact_text()?;

login_again == BoolPromptOptions::Yes
}
#[cfg(test)]
{
false
}
}
_ => true,
};

if !person_wants_to_login {
Ok(AuthorizationState::Cancelled)
} else if self.no_browser {
self.get_token_or_ask_user(&env)
} else {
// switch between two methods of getting the token.
// start two async processes, 10 minute timeout and get token from browser. Whichever finishes first, use that.
let timeout_future = tokio::time::sleep(Duration::from_secs(60) * 10);
dynamite-bud marked this conversation as resolved.
Show resolved Hide resolved
tokio::select! {
_ = timeout_future => {
Ok(AuthorizationState::TimedOut)
},
token = self.get_token_from_browser(&env) => {
token
}
}
}
_ => true,
};

if !person_wants_to_login {
return Ok(());
}

let auth_state = if self.no_browser {
self.get_token_or_ask_user(&env)?
} else {
// switch between two methods of getting the token.
// start two async processes, 10 minute timeout and get token from browser. Whichever finishes first, use that.
let timeout_future = tokio::time::sleep(Duration::from_secs(60) * 10);
tokio::select! {
_ = timeout_future => {
AuthorizationState::TimedOut
},
token = self.get_token_from_browser(&env) => {
token?
}
}
};
}?;

match auth_state {
AuthorizationState::TokenSuccess(token) => {
Expand Down
Loading