Skip to main content

PendingAuthorization

Struct PendingAuthorization 

Source
pub struct PendingAuthorization { /* private fields */ }
Expand description

The secrets needed to complete an authorization request.

Created by super::authorize::AuthorizationUrl::start. Hold this for the duration of the flow — in session storage for a web backend, in memory for a native or client-side app — then finish with PendingAuthorization::complete.

Keeping the verifier and state together here means the CSRF check and the verifier cannot be forgotten: the only way to reach the token exchange is through a method that performs both.

§Example

use lichess_api::client::LichessApi;
use lichess_api::model::oauth::authorize::AuthorizationUrl;

let (url, pending) = AuthorizationUrl::generated("example.com", "http://example.com/")
    .scope("preference:read")
    .start()?;

// Send the user to `url`. They come back to your `redirect_uri`, which
// carries the authorization result in its query string.
let redirect_url = url::Url::parse("http://example.com/?code=...&state=...").unwrap();

// No token yet, so the client is unauthenticated here.
let api = LichessApi::new(reqwest::Client::new(), None);
let token = pending.complete(&api, &redirect_url).await?;

// Subsequent requests act on behalf of the user.
let api = LichessApi::new(reqwest::Client::new(), Some(token.access_token));

Implementations§

Source§

impl PendingAuthorization

Source

pub fn new( verifier: impl Into<String>, state: impl Into<String>, client_id: impl Into<String>, redirect_uri: impl Into<String>, ) -> Self

Source

pub fn state(&self) -> &str

The state this request expects back from the authorization result.

Source

pub fn exchange_form(self, redirect_url: &Url) -> Result<TokenExchangeForm>

Parse an authorization result and produce the token exchange form.

redirect_url is the full URL the user was redirected back to, including its query string. Returns an error if the authorization was denied, if the state does not match, or if the URL is missing the authorization code.

Use this when you want to inspect or send the exchange yourself; PendingAuthorization::complete does this and performs the exchange.

Source

pub async fn complete( self, api: &LichessApi<Client>, redirect_url: &Url, ) -> Result<AccessToken>

Complete the flow: verify the authorization result and exchange the code for an access token.

redirect_url is the full URL the user was redirected back to.

The client need not be authenticated — this is what produces the token — so LichessApi::new(client, None) is fine here.

Trait Implementations§

Source§

impl Clone for PendingAuthorization

Source§

fn clone(&self) -> PendingAuthorization

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for PendingAuthorization

Source§

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

Formats the value using the given formatter. Read more

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<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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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<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