Skip to main content

LicenseManager

Struct LicenseManager 

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

The license state machine: one per app, created by the plugin and reached with LicensemanagerExt::license.

On creation it validates the stored license key (in the background when the stored token is valid) and begins a periodic clock-tamper check. The plugin disposes it when the app exits.

Implementations§

Source§

impl LicenseManager

Source

pub async fn fingerprint(&self) -> String

Stable per-machine, per-install, per-product fingerprint: {base64 sha256 of the machine id}:{random install id}:{product id}. Cached after the first call.

Source

pub fn state(&self) -> LicenseState

The current state.

Source

pub async fn ready(&self) -> LicenseState

Resolves with the state once startup validation has completed, or as soon as the stored token is found valid; the online validation then continues in the background. Every caller gets the same state.

Source

pub fn on_state_change<F>(&self, listener: F) -> Subscription
where F: Fn(LicenseState) + Send + Sync + 'static,

Call listener on every state change, until the returned Subscription is dropped. A panicking listener is ignored.

Source

pub fn subscribe(&self) -> Receiver<LicenseState>

A receiver of the current state and every change.

Source

pub async fn set_license_key( &self, input: &str, ) -> Result<LicenseState, LicenseError>

Validate a key the user typed and, on success, store it and activate. The key is trimmed but its case is kept.

Fails when validation fails for any reason, including the server being unreachable. Nothing is stored and the current state is left untouched.

Source

pub async fn refresh(&self) -> LicenseState

Re-validate the stored key now, e.g. after the customer renewed an expired license. Never fails.

Source

pub fn license_key(&self) -> Option<String>

The stored license key, or None before one was set.

Source

pub fn portal_url(&self) -> String

Link to the customer portal for this product.

Source

pub fn latest_allowed_version(&self) -> LatestAllowedVersion

In state VERSION_NOT_ALLOWED: the latest version the license allows. NotApplicable otherwise, and when the refusal came from the stored token while offline (it only knows the max version, not the latest release).

Source

pub fn offline_state(&self) -> OfflineState

Whether the last validation reached the server. When offline, the app keeps running on the stored token until valid_until.

Source

pub fn is_clock_tampered(&self) -> bool

True once a backwards clock jump has been observed.

Source

pub fn dispose(&self)

Stop the periodic clock check, retries and scheduled re-validations. Idempotent. The plugin calls it when the app exits.

Trait Implementations§

Source§

impl Clone for LicenseManager

Source§

fn clone(&self) -> Self

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 LicenseManager

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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 = !

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

fn try_from(value: U) -> Result<T, !>

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> UserEvent for T
where T: Debug + Clone + Send + 'static,

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