Struct rocket_oauth2::OAuth2
source · pub struct OAuth2<K>(/* private fields */);
Expand description
Utilities for OAuth authentication in Rocket applications.
Implementations§
source§impl<K: 'static> OAuth2<K>
impl<K: 'static> OAuth2<K>
sourcepub fn fairing(config_name: impl AsRef<str> + Send + 'static) -> impl Fairing
pub fn fairing(config_name: impl AsRef<str> + Send + 'static) -> impl Fairing
Create an OAuth2 fairing. The fairing will read the configuration in
config_name
and register itself in the application so that
TokenResponse<K>
can be used.
Example
use rocket::fairing::AdHoc;
use rocket_oauth2::{HyperRustlsAdapter, OAuth2, OAuthConfig};
struct GitHub;
#[rocket::launch]
fn rocket() -> _ {
rocket::build().attach(OAuth2::<GitHub>::fairing("github"))
}
sourcepub fn custom<A: Adapter>(adapter: A, config: OAuthConfig) -> impl Fairing
pub fn custom<A: Adapter>(adapter: A, config: OAuthConfig) -> impl Fairing
Create an OAuth2 fairing with a custom adapter and configuration.
Example
use rocket::fairing::AdHoc;
use rocket_oauth2::{HyperRustlsAdapter, OAuth2, OAuthConfig, StaticProvider};
struct MyProvider;
#[rocket::launch]
fn rocket() -> _ {
rocket::build()
.attach(AdHoc::on_ignite("OAuth Config", |rocket| async {
let config = OAuthConfig::new(
StaticProvider {
auth_uri: "auth uri".into(),
token_uri: "token uri".into(),
},
"client id".to_string(),
"client secret".to_string(),
Some("http://localhost:8000/auth".to_string()),
);
rocket.attach(OAuth2::<MyProvider>::custom(HyperRustlsAdapter::default(), config))
}))
}
sourcepub fn get_redirect(
&self,
cookies: &CookieJar<'_>,
scopes: &[&str]
) -> Result<Redirect, Error>
pub fn get_redirect( &self, cookies: &CookieJar<'_>, scopes: &[&str] ) -> Result<Redirect, Error>
Prepare an authentication redirect. This sets a state cookie and returns
a Redirect
to the authorization endpoint.
Example
use rocket::http::CookieJar;
use rocket::response::Redirect;
use rocket_oauth2::OAuth2;
struct GitHub;
#[rocket::get("/login/github")]
fn github_login(oauth2: OAuth2<GitHub>, cookies: &CookieJar<'_>) -> Redirect {
oauth2.get_redirect(cookies, &["user:read"]).unwrap()
}
sourcepub fn get_redirect_extras(
&self,
cookies: &CookieJar<'_>,
scopes: &[&str],
extras: &[(&str, &str)]
) -> Result<Redirect, Error>
pub fn get_redirect_extras( &self, cookies: &CookieJar<'_>, scopes: &[&str], extras: &[(&str, &str)] ) -> Result<Redirect, Error>
Prepare an authentication redirect. This sets a state cookie and returns
a Redirect
to the authorization endpoint. Unlike get_redirect
,
this method accepts additional query parameters in extras
; this can be
used to provide or request additional information to or from providers.
Example
use rocket::http::CookieJar;
use rocket::response::Redirect;
use rocket_oauth2::OAuth2;
struct Reddit;
#[rocket::get("/login/reddit")]
fn reddit_login(oauth2: OAuth2<Reddit>, cookies: &CookieJar<'_>) -> Redirect {
oauth2.get_redirect_extras(cookies, &["identity"], &[("duration", "permanent")]).unwrap()
}
sourcepub async fn refresh(
&self,
refresh_token: &str
) -> Result<TokenResponse<K>, Error>
pub async fn refresh( &self, refresh_token: &str ) -> Result<TokenResponse<K>, Error>
Request a new access token given a refresh token. The refresh token
must have been returned by the provider in a previous TokenResponse
.
Example
use rocket_oauth2::OAuth2;
struct GitHub;
#[rocket::get("/")]
async fn index(oauth2: OAuth2<GitHub>) {
// get previously stored refresh_token
oauth2.refresh(refresh_token).await.unwrap();
}
Trait Implementations§
Auto Trait Implementations§
impl<K> !RefUnwindSafe for OAuth2<K>
impl<K> Send for OAuth2<K>
impl<K> Sync for OAuth2<K>
impl<K> Unpin for OAuth2<K>
impl<K> !UnwindSafe for OAuth2<K>
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
§impl<T> IntoCollection<T> for T
impl<T> IntoCollection<T> for T
§fn into_collection<A>(self) -> SmallVec<A>where
A: Array<Item = T>,
fn into_collection<A>(self) -> SmallVec<A>where
A: Array<Item = T>,
self
into a collection.fn mapped<U, F, A>(self, f: F) -> SmallVec<A>where
F: FnMut(T) -> U,
A: Array<Item = U>,
§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling [Attribute
] value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
[Quirk
] value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the [Condition
] value
applies. Replaces any previous condition.
See the crate level docs for more details.
Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);