Struct graph_oauth::oauth::OAuth
source · pub struct OAuth { /* private fields */ }
Expand description
OAuth
OAuth client implementing the OAuth 2.0 and OpenID Connect protocols on Microsoft identity platform. This version is specifically meant for the Graph V1.0 and Beta API.
The client supports almost all OAuth 2.0 flows that Microsoft implements as well as the token and code flow specific to the OneDrive api.
The OAuth client is strict on what can be used for a specific OAuth flow. This is to ensure that the credentials used in requests include only information that is required or optional for that specific grant and not any other. Even if you accidently pass a value, such as a nonce, for a grant type that does not use it, any request that is made will not include the nonce regardless.
Disclaimer
Using this API for other resource owners besides Microsoft may work but functionality will more then likely be limited.
Example
use graph_oauth::oauth::OAuth;
let oauth = OAuth::new();
Implementations§
source§impl OAuth
impl OAuth
sourcepub fn new() -> OAuth
pub fn new() -> OAuth
Create a new OAuth instance.
Example
use graph_oauth::oauth::{OAuth, GrantType};
let mut oauth = OAuth::new();
sourcepub fn insert<V: ToString>(
&mut self,
oac: OAuthCredential,
value: V
) -> &mut OAuth
pub fn insert<V: ToString>( &mut self, oac: OAuthCredential, value: V ) -> &mut OAuth
Insert oauth credentials using the OAuthCredential enum. This method is used internally for each of the setter methods. Callers can optionally use this method to set credentials instead of the individual setter methods.
Example
oauth.insert(OAuthCredential::AuthorizeURL, "https://example.com");
assert!(oauth.contains(OAuthCredential::AuthorizeURL));
println!("{:#?}", oauth.get(OAuthCredential::AuthorizeURL));
sourcepub fn entry<V: ToString>(
&mut self,
oac: OAuthCredential,
value: V
) -> &mut String
pub fn entry<V: ToString>( &mut self, oac: OAuthCredential, value: V ) -> &mut String
Insert and OAuth credential using the entry trait and
returning the credential. This internally calls
entry.(OAuthCredential).or_insret_with(value)
.
Example
let entry = oauth.entry(OAuthCredential::AuthorizeURL, "https://example.com");
assert_eq!(entry, "https://example.com")
sourcepub fn get(&self, oac: OAuthCredential) -> Option<String>
pub fn get(&self, oac: OAuthCredential) -> Option<String>
sourcepub fn contains(&self, t: OAuthCredential) -> bool
pub fn contains(&self, t: OAuthCredential) -> bool
Check if an OAuth credential has already been set.
Example
println!("{:#?}", oauth.contains(OAuthCredential::Nonce));
pub fn contains_key(&self, key: &str) -> bool
sourcepub fn remove(&mut self, oac: OAuthCredential) -> &mut OAuth
pub fn remove(&mut self, oac: OAuthCredential) -> &mut OAuth
Remove a field from OAuth.
Example
oauth.client_id("client_id");
assert_eq!(oauth.contains(OAuthCredential::ClientId), true);
oauth.remove(OAuthCredential::ClientId);
assert_eq!(oauth.contains(OAuthCredential::ClientId), false);
sourcepub fn client_secret(&mut self, value: &str) -> &mut OAuth
pub fn client_secret(&mut self, value: &str) -> &mut OAuth
sourcepub fn access_token_url(&mut self, value: &str) -> &mut OAuth
pub fn access_token_url(&mut self, value: &str) -> &mut OAuth
Set the access token url of a request for OAuth
Example
oauth.access_token_url("https://example.com/token");
sourcepub fn refresh_token_url(&mut self, value: &str) -> &mut OAuth
pub fn refresh_token_url(&mut self, value: &str) -> &mut OAuth
Set the refresh token url of a request for OAuth
Example
oauth.refresh_token_url("https://example.com/token");
sourcepub fn tenant_id(&mut self, value: &str) -> &mut OAuth
pub fn tenant_id(&mut self, value: &str) -> &mut OAuth
Set the authorization, access token, and refresh token URL for OAuth based on a tenant id.
Example
oauth.tenant_id("tenant_id");
sourcepub fn redirect_uri(&mut self, value: &str) -> &mut OAuth
pub fn redirect_uri(&mut self, value: &str) -> &mut OAuth
sourcepub fn access_code(&mut self, value: &str) -> &mut OAuth
pub fn access_code(&mut self, value: &str) -> &mut OAuth
sourcepub fn response_mode(&mut self, value: &str) -> &mut OAuth
pub fn response_mode(&mut self, value: &str) -> &mut OAuth
sourcepub fn response_type(&mut self, value: &str) -> &mut OAuth
pub fn response_type(&mut self, value: &str) -> &mut OAuth
sourcepub fn id_token(&mut self, value: IdToken) -> &mut OAuth
pub fn id_token(&mut self, value: IdToken) -> &mut OAuth
Set id token for open id.
Example
oauth.id_token(IdToken::new("1345", "code", "state", "session_state"));
sourcepub fn session_state(&mut self, value: &str) -> &mut OAuth
pub fn session_state(&mut self, value: &str) -> &mut OAuth
sourcepub fn grant_type(&mut self, value: &str) -> &mut OAuth
pub fn grant_type(&mut self, value: &str) -> &mut OAuth
sourcepub fn code_verifier(&mut self, value: &str) -> &mut OAuth
pub fn code_verifier(&mut self, value: &str) -> &mut OAuth
sourcepub fn domain_hint(&mut self, value: &str) -> &mut OAuth
pub fn domain_hint(&mut self, value: &str) -> &mut OAuth
sourcepub fn code_challenge(&mut self, value: &str) -> &mut OAuth
pub fn code_challenge(&mut self, value: &str) -> &mut OAuth
sourcepub fn code_challenge_method(&mut self, value: &str) -> &mut OAuth
pub fn code_challenge_method(&mut self, value: &str) -> &mut OAuth
sourcepub fn generate_sha256_challenge_and_verifier(
&mut self
) -> Result<(), GraphFailure>
pub fn generate_sha256_challenge_and_verifier( &mut self ) -> Result<(), GraphFailure>
Generate a code challenge and code verifier for the authorization code grant flow using proof key for code exchange (PKCE) and SHA256.
This method automatically sets the code_verifier, code_challenge, and code_challenge_method fields.
For authorization, the code_challenge_method parameter in the request body is automatically set to ‘S256’.
Internally this method uses the Rust ring cyrpto library to generate a secure random 32-octet sequence that is base64 URL encoded (no padding). This sequence is hashed using SHA256 and base64 URL encoded (no padding) resulting in a 43-octet URL safe string.
For more info on PKCE and entropy see: https://tools.ietf.org/html/rfc7636#section-7.1
Example
let mut oauth = OAuth::new();
oauth.generate_sha256_challenge_and_verifier();
println!("Code Challenge: {:#?}", oauth.get(OAuthCredential::CodeChallenge));
println!("Code Verifier: {:#?}", oauth.get(OAuthCredential::CodeVerifier));
println!("Code Challenge Method: {:#?}", oauth.get(OAuthCredential::CodeChallengeMethod));
sourcepub fn login_hint(&mut self, value: &str) -> &mut OAuth
pub fn login_hint(&mut self, value: &str) -> &mut OAuth
sourcepub fn client_assertion(&mut self, value: &str) -> &mut OAuth
pub fn client_assertion(&mut self, value: &str) -> &mut OAuth
sourcepub fn client_assertion_type(&mut self, value: &str) -> &mut OAuth
pub fn client_assertion_type(&mut self, value: &str) -> &mut OAuth
sourcepub fn logout_url(&mut self, value: &str) -> &mut OAuth
pub fn logout_url(&mut self, value: &str) -> &mut OAuth
Set the url to send a post request that will log out the user.
Example
oauth.logout_url("https://example.com/logout?");
sourcepub fn post_logout_redirect_uri(&mut self, value: &str) -> &mut OAuth
pub fn post_logout_redirect_uri(&mut self, value: &str) -> &mut OAuth
Set the redirect uri that user will be redirected to after logging out.
Example
oauth.post_logout_redirect_uri("http://localhost:8080");
sourcepub fn username(&mut self, value: &str) -> &mut OAuth
pub fn username(&mut self, value: &str) -> &mut OAuth
Set the redirect uri that user will be redirected to after logging out.
Example
oauth.username("user");
assert!(oauth.contains(OAuthCredential::Username))
sourcepub fn password(&mut self, value: &str) -> &mut OAuth
pub fn password(&mut self, value: &str) -> &mut OAuth
Set the redirect uri that user will be redirected to after logging out.
Example
oauth.password("user");
assert!(oauth.contains(OAuthCredential::Password))
sourcepub fn add_scope<T: ToString>(&mut self, scope: T) -> &mut OAuth
pub fn add_scope<T: ToString>(&mut self, scope: T) -> &mut OAuth
Add a scope’ for the OAuth URL.
Example
oauth.add_scope("Sites.Read")
.add_scope("Sites.ReadWrite")
.add_scope("Sites.ReadWrite.All");
assert_eq!(oauth.join_scopes(" "), "Sites.Read Sites.ReadWrite Sites.ReadWrite.All");
sourcepub fn get_scopes(&self) -> &BTreeSet<String>
pub fn get_scopes(&self) -> &BTreeSet<String>
Get the scopes.
Example
let mut oauth = OAuth::new();
oauth.add_scope("Files.Read");
oauth.add_scope("Files.ReadWrite");
let scopes = oauth.get_scopes();
assert!(scopes.contains("Files.Read"));
assert!(scopes.contains("Files.ReadWrite"));
sourcepub fn join_scopes(&self, sep: &str) -> String
pub fn join_scopes(&self, sep: &str) -> String
Join scopes.
Example
// the scopes take a separator just like Vec join.
let s = oauth.join_scopes(" ");
println!("{:#?}", s);
sourcepub fn extend_scopes<T: ToString, I: IntoIterator<Item = T>>(
&mut self,
iter: I
) -> &mut Self
pub fn extend_scopes<T: ToString, I: IntoIterator<Item = T>>( &mut self, iter: I ) -> &mut Self
Extend scopes.
Example
let scopes1 = vec!["Files.Read", "Files.ReadWrite"];
oauth.extend_scopes(&scopes1);
assert_eq!(oauth.join_scopes(" "), "Files.Read Files.ReadWrite");
sourcepub fn contains_scope<T: ToString>(&self, scope: T) -> bool
pub fn contains_scope<T: ToString>(&self, scope: T) -> bool
Check if OAuth contains a specific scope.
Example
oauth.add_scope("Files.Read");
assert_eq!(oauth.contains_scope("Files.Read"), true);
// Or using static scopes
oauth.add_scope("File.ReadWrite");
assert!(oauth.contains_scope("File.ReadWrite"));
sourcepub fn remove_scope<T: AsRef<str>>(&mut self, scope: T)
pub fn remove_scope<T: AsRef<str>>(&mut self, scope: T)
sourcepub fn clear_scopes(&mut self)
pub fn clear_scopes(&mut self)
Remove all scopes.
Example
oauth.add_scope("Files.Read").add_scope("Files.ReadWrite");
assert_eq!("Files.Read Files.ReadWrite", oauth.join_scopes(" "));
oauth.clear_scopes();
assert!(oauth.get_scopes().is_empty());
sourcepub fn access_token(&mut self, ac: AccessToken)
pub fn access_token(&mut self, ac: AccessToken)
Set the access token.
Example
use graph_oauth::oauth::OAuth;
use graph_oauth::oauth::AccessToken;
let mut oauth = OAuth::new();
let access_token = AccessToken::default();
oauth.access_token(access_token);
sourcepub fn get_access_token(&self) -> Option<AccessToken>
pub fn get_access_token(&self) -> Option<AccessToken>
Get the access token.
Example
let access_token = oauth.get_access_token().unwrap();
println!("{:#?}", access_token);
sourcepub fn get_refresh_token(&self) -> Result<String, GraphFailure>
pub fn get_refresh_token(&self) -> Result<String, GraphFailure>
Get the refrsh token. This method returns the current refresh token stored in OAuth and does not make a request for a refresh token.
Example
let mut access_token = AccessToken::default();
access_token.set_refresh_token("refresh_token");
oauth.access_token(access_token);
let refresh_token = oauth.get_refresh_token().unwrap();
println!("{:#?}", refresh_token);
pub fn build(&mut self) -> GrantSelector<AccessTokenGrant>
pub fn build_async(&mut self) -> GrantSelector<AsyncAccessTokenGrant>
sourcepub fn v1_logout(&mut self) -> Result<Output, GraphFailure>
pub fn v1_logout(&mut self) -> Result<Output, GraphFailure>
source§impl OAuth
impl OAuth
pub fn params( &mut self, pairs: Vec<OAuthCredential> ) -> Result<HashMap<String, String>, GraphFailure>
pub fn encode_uri( &mut self, grant: GrantType, request_type: GrantRequest ) -> Result<String, GraphFailure>
Trait Implementations§
source§impl<'de> Deserialize<'de> for OAuth
impl<'de> Deserialize<'de> for OAuth
source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,
source§impl<V: ToString> Extend<(OAuthCredential, V)> for OAuth
impl<V: ToString> Extend<(OAuthCredential, V)> for OAuth
Extend the OAuth credentials.
Example
let mut map: HashMap<OAuthCredential, &str> = HashMap::new();
map.insert(OAuthCredential::ClientId, "client_id");
map.insert(OAuthCredential::ClientSecret, "client_secret");
oauth.extend(map);
source§fn extend<I: IntoIterator<Item = (OAuthCredential, V)>>(&mut self, iter: I)
fn extend<I: IntoIterator<Item = (OAuthCredential, V)>>(&mut self, iter: I)
source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one
)source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one
)source§impl PartialEq<OAuth> for OAuth
impl PartialEq<OAuth> for OAuth
impl Eq for OAuth
impl StructuralEq for OAuth
impl StructuralPartialEq for OAuth
Auto Trait Implementations§
impl RefUnwindSafe for OAuth
impl Send for OAuth
impl Sync for OAuth
impl Unpin for OAuth
impl UnwindSafe for OAuth
Blanket Implementations§
source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.