websocket
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
use std::time::Duration;
|
||||
use thiserror::Error;
|
||||
|
||||
use tokio::{
|
||||
sync::broadcast::{Receiver, Sender},
|
||||
@@ -6,13 +7,30 @@ use tokio::{
|
||||
};
|
||||
|
||||
use crate::{
|
||||
config::Config, models::*, pipe::Pipe, state_machine::Event, BASE_URL, CLIENT_ID, REDIRECT_URI,
|
||||
config::{Config, ConfigError},
|
||||
models::*,
|
||||
pipe::Pipe,
|
||||
state_machine::Event,
|
||||
BASE_URL, CLIENT_ID, REDIRECT_URI,
|
||||
};
|
||||
|
||||
pub fn open_browser(
|
||||
code_verifier: CodeVerifier,
|
||||
code_challenge_method: CodeChallengeMethod,
|
||||
) -> Result<(), anyhow::Error> {
|
||||
#[derive(Debug, Error)]
|
||||
pub enum OpenBrowserError {
|
||||
#[error(transparent)]
|
||||
SerdeQs(#[from] serde_qs::Error),
|
||||
#[error(transparent)]
|
||||
Io(#[from] std::io::Error),
|
||||
#[error(transparent)]
|
||||
Config(#[from] ConfigError),
|
||||
}
|
||||
|
||||
pub fn open_browser(config: Config) -> Result<(), OpenBrowserError> {
|
||||
let code_verifier = CodeVerifier::new();
|
||||
let code_challenge_method = CodeChallengeMethod::Sha256;
|
||||
|
||||
config.set_code_verifier(Some(code_verifier.clone()))?;
|
||||
config.set_code_challenge_method(Some(code_challenge_method.clone()))?;
|
||||
|
||||
let code_challenge = match code_challenge_method {
|
||||
CodeChallengeMethod::Plain => {
|
||||
use base64::prelude::*;
|
||||
@@ -84,8 +102,11 @@ pub async fn start_code_to_token(
|
||||
.await?;
|
||||
|
||||
let response: AuthorizationCodeResponse = response.json().await?;
|
||||
let token = response.token();
|
||||
|
||||
event_sender.send(Event::TokenReceived { token: response.token() })?;
|
||||
config.set_token(Some(token.clone()))?;
|
||||
|
||||
event_sender.send(Event::TokenReceived { token })?;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user