pub struct PgUserStore { /* private fields */ }Implementations§
Trait Implementations§
Source§impl Clone for PgUserStore
impl Clone for PgUserStore
Source§impl UserStore for PgUserStore
impl UserStore for PgUserStore
Source§fn create_user<'life0, 'async_trait>(
&'life0 self,
new_user: NewUser,
) -> Pin<Box<dyn Future<Output = Result<User, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn create_user<'life0, 'async_trait>(
&'life0 self,
new_user: NewUser,
) -> Pin<Box<dyn Future<Output = Result<User, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Create an account, assigning a fresh
UserId, and return it.Source§fn find_by_email_or_username<'life0, 'life1, 'async_trait>(
&'life0 self,
identifier: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<User>, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn find_by_email_or_username<'life0, 'life1, 'async_trait>(
&'life0 self,
identifier: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<User>, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Resolve an account by an identifier matching either its
email or its
username, mirroring SynBioHub’s login lookup. None when neither
matches.Source§fn get_by_id<'life0, 'async_trait>(
&'life0 self,
id: UserId,
) -> Pin<Box<dyn Future<Output = Result<Option<User>, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn get_by_id<'life0, 'async_trait>(
&'life0 self,
id: UserId,
) -> Pin<Box<dyn Future<Output = Result<Option<User>, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Fetch an account by id.
None when no such account exists.Source§fn list_users<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<User>, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn list_users<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<Vec<User>, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Every account ordered by username. Administrator projections use this
instead of backend-specific SQL or column-family scans.
Source§fn page_users<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 UserListQuery,
) -> Pin<Box<dyn Future<Output = Result<UserPage, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn page_users<'life0, 'life1, 'async_trait>(
&'life0 self,
query: &'life1 UserListQuery,
) -> Pin<Box<dyn Future<Output = Result<UserPage, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Filter and page accounts inside the backend. Implementations should not
materialize the complete account table merely to serve one Admin page.
Source§fn update_user<'life0, 'life1, 'async_trait>(
&'life0 self,
user: &'life1 User,
) -> Pin<Box<dyn Future<Output = Result<User, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn update_user<'life0, 'life1, 'async_trait>(
&'life0 self,
user: &'life1 User,
) -> Pin<Box<dyn Future<Output = Result<User, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Persist the mutable profile fields (
name, email, affiliation, and
the membership flags) of user, returning the stored account.Source§fn set_sole_admin<'life0, 'async_trait>(
&'life0 self,
id: UserId,
) -> Pin<Box<dyn Future<Output = Result<(), DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn set_sole_admin<'life0, 'async_trait>(
&'life0 self,
id: UserId,
) -> Pin<Box<dyn Future<Output = Result<(), DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Atomically make
id the only administrator account. Read moreSource§fn set_password_hash<'life0, 'life1, 'async_trait>(
&'life0 self,
id: UserId,
password_hash: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_password_hash<'life0, 'life1, 'async_trait>(
&'life0 self,
id: UserId,
password_hash: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Replace an account’s stored password hash, e.g. transparent rehashing of
a legacy digest to argon2 on a successful login.
Source§fn set_reset_link<'life0, 'life1, 'async_trait>(
&'life0 self,
id: UserId,
link: Option<&'life1 str>,
) -> Pin<Box<dyn Future<Output = Result<(), DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn set_reset_link<'life0, 'life1, 'async_trait>(
&'life0 self,
id: UserId,
link: Option<&'life1 str>,
) -> Pin<Box<dyn Future<Output = Result<(), DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Set (
Some) or clear (None) an account’s outstanding reset link.Source§fn consume_reset_link<'life0, 'life1, 'async_trait>(
&'life0 self,
link: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<User>, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn consume_reset_link<'life0, 'life1, 'async_trait>(
&'life0 self,
link: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Option<User>, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Atomically claim the account whose outstanding reset link equals
link,
clearing the link so it cannot be reused. Returns the claimed account, or
None when no account carries that link.Source§fn delete_user<'life0, 'async_trait>(
&'life0 self,
id: UserId,
) -> Pin<Box<dyn Future<Output = Result<bool, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn delete_user<'life0, 'async_trait>(
&'life0 self,
id: UserId,
) -> Pin<Box<dyn Future<Output = Result<bool, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Delete the account with
id, returning whether a row was removed
(false when no such account exists).Source§fn any_admin<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<bool, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn any_admin<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<bool, DomainError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Whether any administrator account exists. First-launch setup uses this to
decide whether an instance still needs its initial administrator.
Auto Trait Implementations§
impl !RefUnwindSafe for PgUserStore
impl !UnwindSafe for PgUserStore
impl Freeze for PgUserStore
impl Send for PgUserStore
impl Sync for PgUserStore
impl Unpin for PgUserStore
impl UnsafeUnpin for PgUserStore
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more