refactor(ops/yandex-cloud-rs): allow TokenProvider impls to fail
It's actually quite common that a token provider might fail, for example when fetching a token from instance metadata. Change-Id: Ie0126fb92c6c613ad36b5583fd68505fdd97f2c1 Reviewed-on: https://cl.tvl.fyi/c/depot/+/8764 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su>
This commit is contained in:
parent
ed388f019a
commit
2e893dca1d
1 changed files with 6 additions and 6 deletions
|
@ -52,18 +52,18 @@ pub mod tonic_exports {
|
|||
/// tokens for Yandex Cloud.
|
||||
pub trait TokenProvider {
|
||||
/// Fetch a currently valid authentication token for Yandex Cloud.
|
||||
fn get_token<'a>(&'a mut self) -> &'a str;
|
||||
fn get_token<'a>(&'a mut self) -> Result<&'a str, tonic::Status>;
|
||||
}
|
||||
|
||||
impl TokenProvider for String {
|
||||
fn get_token<'a>(&'a mut self) -> &'a str {
|
||||
self.as_str()
|
||||
fn get_token<'a>(&'a mut self) -> Result<&'a str, tonic::Status> {
|
||||
Ok(self.as_str())
|
||||
}
|
||||
}
|
||||
|
||||
impl TokenProvider for &'static str {
|
||||
fn get_token(&mut self) -> &'static str {
|
||||
*self
|
||||
fn get_token(&mut self) -> Result<&'static str, tonic::Status> {
|
||||
Ok(*self)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -89,7 +89,7 @@ impl<T: TokenProvider> Interceptor for AuthInterceptor<T> {
|
|||
&mut self,
|
||||
mut request: tonic::Request<()>,
|
||||
) -> Result<tonic::Request<()>, tonic::Status> {
|
||||
let token: MetadataValue<Ascii> = format!("Bearer {}", self.token_provider.get_token())
|
||||
let token: MetadataValue<Ascii> = format!("Bearer {}", self.token_provider.get_token()?)
|
||||
.try_into()
|
||||
.map_err(|_| {
|
||||
tonic::Status::invalid_argument("authorization token contained invalid characters")
|
||||
|
|
Loading…
Reference in a new issue