Struct AccessToken

Source
pub struct AccessToken {
    pub access_token: String,
    pub expires_in: i128,
    pub refresh_token: String,
    pub scope: String,
    pub token_type: String,
}
Expand description

An opaque (proprietary format) token that conforms to the OAuth 2.0 framework.

They contain authorization information, but not identity information. They are used to authenticate and provide authorization information to Google APIs.

§Examples:

use drive_v3::AccessToken;
use drive_v3::ClientSecrets;

// Load your client_secrets file
let secrets_path = "my_client_secrets.json";
let my_client_secrets = ClientSecrets::from_file(secrets_path)?;

// Request an access token, this will prompt you to authorize via the browser
let scopes = ["https://www.googleapis.com/auth/drive.metadata.readonly"];
let my_access_token = AccessToken::request(&my_client_secrets, &scopes)?;

// After getting your token you can make a request (with reqwest for example) using it for authorization
let client = reqwest::blocking::Client::new();
let body = client.get("google-api-endpoint")
    .bearer_auth(&my_access_token.access_token)
    .send()?
    .text()?;

println!("response: {:?}", body);

Fields§

§access_token: String

The value used for for authentication or authorization.

§expires_in: i128

The number of seconds until the token expires.

§refresh_token: String

A special token used to request a new token after this one expires or is revoked.

§scope: String

The Drive API scopes added to this access token as a string separated by spaces.

§token_type: String

Type of the token, an access token should always be of the Bearer type.

Implementations§

Source§

impl AccessToken

Source

pub fn is_valid(&self) -> bool

Checks if an AccessToken is valid by making a request to the tokeninfo endpoint of the Google Drive API.

§Note

is_valid will return false if the token has expired or has been revoked, but it will also return false if the tokeninfo endpoint cannot be reached or if the request returns an error response of any kind.

§Examples:
use drive_v3::ClientSecrets;

let secrets_path = "my_client_secrets.json";
let my_client_secrets = ClientSecrets::from_file(secrets_path)?;

if access_token.is_valid() {
    // Do something with your valid token
} else {
    access_token.refresh(&my_client_secrets)?;
}
Source

pub fn has_scopes<T: AsRef<str>>(&self, scopes: &[T]) -> bool

Checks if an AccessToken has all of the specified scopes.

See Choose scopes documentation, for information on the scopes supported by the Google Drive API.

§Note

has_scopes does not check if the present scopes are equal to the specified ones, it only checks that all specified scopes are present in the AccessToken’s scopes.

§Examples
let required_scopes = [
    "https://www.googleapis.com/auth/drive.metadata.readonly",
    "https://www.googleapis.com/auth/drive.file",
];

assert!( access_token.has_scopes(&required_scopes) );
Source

pub fn request<T: AsRef<str>>( client_secrets: &ClientSecrets, scopes: &[T], ) -> Result<Self>

Requests an AccessToken with the specified scopes from the Google Drive API using OAuth2.

See Choose scopes, for information on the scopes supported by the Google Drive API.

§Examples:
use drive_v3::AccessToken;
use drive_v3::ClientSecrets;

// Load your client_secrets file
let secrets_path = "my_client_secrets.json";
let my_client_secrets = ClientSecrets::from_file(secrets_path)?;

// Request an access token, this will prompt you to authorize via the browser
let scopes = ["https://www.googleapis.com/auth/drive.metadata.readonly"];
let my_access_token = AccessToken::request(&my_client_secrets, &scopes)?;

// After getting your token you can make a request (with reqwest for example) using it for authorization
let client = reqwest::blocking::Client::new();
let body = client.get("google-api-endpoint")
    .bearer_auth(&my_access_token.access_token)
    .send()?
    .text()?;

println!("response: {:?}", body);
§Errors
  • a HexDecoding or UrlParsing error, if the creation of the code verifier failed.
  • a Request error, if unable to send the request or get a body from the response.
  • a Response error, if the token request returned an error response.
  • a Json error, if unable to parse the response’s body to an AccessToken.
  • a MismatchedScopes error, if the scopes in the created AccessToken are different to the scopes passed to the function.
Source

pub fn refresh(&mut self, client_secrets: &ClientSecrets) -> Result<()>

Refreshes an AccessToken by requesting a new token from OAuth2 using its refresh_token.

§Note

There are limits on the number of refresh tokens that your application will be issued:

  • A limit per client/user combination.
  • A limit per user across all clients.

It is your responsibility save refreshed tokens in long-term storage and continue to use them for as long as they remain valid. If your application requests too many refresh tokens, it may run into these limits, in which case older refresh tokens will stop working.

§Examples:
use drive_v3::ClientSecrets;

let secrets_path = "my_client_secrets.json";
let my_client_secrets = ClientSecrets::from_file(secrets_path)?;

if !access_token.is_valid() {
    access_token.refresh(&my_client_secrets)?;
}

assert!( access_token.is_valid() );
§Errors
  • a Request error, if unable to send the refresh request or get a body from the response.
  • a Json error, if unable to parse the received token from JSON.

Trait Implementations§

Source§

impl Clone for AccessToken

Source§

fn clone(&self) -> AccessToken

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for AccessToken

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for AccessToken

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl PartialEq for AccessToken

Source§

fn eq(&self, other: &AccessToken) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl Serialize for AccessToken

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Eq for AccessToken

Source§

impl StructuralPartialEq for AccessToken

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,