feat(GetToken): Add application_secret method to GetToken trait.

This makes decoupling Authenticator and individual flows easier while
allowing for refreshing tokens.
This commit is contained in:
Lewin Bormann
2019-06-13 15:29:18 +02:00
parent 86e71cca5d
commit a656df6b74
4 changed files with 21 additions and 10 deletions

View File

@@ -55,6 +55,9 @@ impl<
fn api_key(&mut self) -> Option<String> {
None
}
fn application_secret(&self) -> ApplicationSecret {
self.application_secret.clone()
}
}
impl<FD, C> DeviceFlow<FD, C>

View File

@@ -61,10 +61,8 @@ where
})
}
impl<
FD: FlowDelegate + 'static + Send + Clone,
C: hyper::client::connect::Connect + 'static,
> GetToken for InstalledFlow<FD, C>
impl<FD: FlowDelegate + 'static + Send + Clone, C: hyper::client::connect::Connect + 'static>
GetToken for InstalledFlow<FD, C>
{
fn token<'b, I, T>(
&mut self,
@@ -79,6 +77,9 @@ impl<
fn api_key(&mut self) -> Option<String> {
None
}
fn application_secret(&self) -> ApplicationSecret {
self.appsecret.clone()
}
}
pub struct InstalledFlow<FD: FlowDelegate, C: hyper::client::connect::Connect + 'static> {
@@ -99,11 +100,8 @@ pub enum InstalledFlowReturnMethod {
HTTPRedirect(u16),
}
impl<
'c,
FD: 'static + FlowDelegate + Clone + Send,
C: 'c + hyper::client::connect::Connect,
> InstalledFlow<FD, C>
impl<'c, FD: 'static + FlowDelegate + Clone + Send, C: 'c + hyper::client::connect::Connect>
InstalledFlow<FD, C>
{
/// Starts a new Installed App auth flow.
/// If HTTPRedirect is chosen as method and the server can't be started, the flow falls

View File

@@ -16,7 +16,7 @@ use std::error;
use std::sync::{Arc, Mutex};
use crate::storage::{hash_scopes, MemoryStorage, TokenStorage};
use crate::types::{GetToken, StringError, Token};
use crate::types::{ApplicationSecret, GetToken, StringError, Token};
use futures::stream::Stream;
use futures::{future, prelude::*};
@@ -358,6 +358,12 @@ where
)
}
/// Returns an empty ApplicationSecret as tokens for service accounts don't need to be
/// refreshed (they are simply reissued).
fn application_secret(&self) -> ApplicationSecret {
Default::default()
}
fn api_key(&mut self) -> Option<String> {
None
}

View File

@@ -205,6 +205,10 @@ pub trait GetToken {
I: Iterator<Item = &'b T>;
fn api_key(&mut self) -> Option<String>;
/// Return an application secret with at least token_uri, client_secret, and client_id filled
/// in. This is used for refreshing tokens without interaction from the flow.
fn application_secret(&self) -> ApplicationSecret;
}
/// Represents a token as returned by OAuth2 servers.