pub struct Password { /* private fields */ }
Expand description
Password authentication using Identity API V3.
For any Identity authentication you need to know auth_url
, which is an authentication endpoint
of the Identity service. For the Password authentication you also need:
- User name and password.
- Domain of the user.
- Name of the project to use.
- Domain of the project.
Note: currently only names are supported for user, user domain and project domain. ID support is coming later.
Start with creating a Password
object using new, then add a project scope
with with_project_scope:
use osauth::common::IdOrName;
let auth = osauth::identity::Password::new(
"https://cloud.local/identity",
"admin",
"pa$$w0rd",
"Default"
)?
.with_project_scope(IdOrName::from_name("project1"), IdOrName::from_id("default"));
let session = osauth::Session::new(auth).await?;
By default, the public
endpoint interface is used. If you would prefer to default to another
one, you can set it on the Session
. Region can also be set there:
use osauth::common::IdOrName;
let scope = osauth::identity::Scope::Project {
project: IdOrName::from_name("project1"),
domain: Some(IdOrName::from_id("default")),
};
let auth = osauth::identity::Password::new(
"https://cloud.local/identity",
"admin",
"pa$$w0rd",
"Default"
)?
.with_scope(scope);
let session = osauth::Session::new(auth)
.await?
.with_endpoint_interface(osauth::InterfaceType::Internal)
.with_region("US-East");
The authentication token is cached while it’s still valid or until
refresh is called.
Clones of a Password
also start with an empty cache.
Implementations§
source§impl Password
impl Password
sourcepub fn new<U, S1, S2, S3>(
auth_url: U,
user_name: S1,
password: S2,
user_domain_name: S3
) -> Result<Password, Error>where
U: AsRef<str>,
S1: Into<String>,
S2: Into<String>,
S3: Into<String>,
pub fn new<U, S1, S2, S3>( auth_url: U, user_name: S1, password: S2, user_domain_name: S3 ) -> Result<Password, Error>where U: AsRef<str>, S1: Into<String>, S2: Into<String>, S3: Into<String>,
Create a password authentication.
sourcepub fn set_project_scope(
&mut self,
project: IdOrName,
domain: impl Into<Option<IdOrName>>
)
pub fn set_project_scope( &mut self, project: IdOrName, domain: impl Into<Option<IdOrName>> )
Scope authentication to the given project.
A convenience wrapper around set_scope
.
sourcepub fn set_scope(&mut self, scope: Scope)
pub fn set_scope(&mut self, scope: Scope)
Add a scope to the authentication.
This is required in the most cases.
sourcepub fn with_project_scope(
self,
project: IdOrName,
domain: impl Into<Option<IdOrName>>
) -> Password
pub fn with_project_scope( self, project: IdOrName, domain: impl Into<Option<IdOrName>> ) -> Password
Scope authentication to the given project.
A convenience wrapper around with_scope
.
sourcepub fn with_scope(self, scope: Scope) -> Self
pub fn with_scope(self, scope: Scope) -> Self
Add a scope to the authentication.
Trait Implementations§
source§impl AuthType for Password
impl AuthType for Password
source§fn authenticate<'life0, 'life1, 'async_trait>(
&'life0 self,
client: &'life1 Client,
request: RequestBuilder
) -> Pin<Box<dyn Future<Output = Result<RequestBuilder, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn authenticate<'life0, 'life1, 'async_trait>( &'life0 self, client: &'life1 Client, request: RequestBuilder ) -> Pin<Box<dyn Future<Output = Result<RequestBuilder, Error>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,
Authenticate a request.
source§fn get_endpoint<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
client: &'life1 Client,
service_type: &'life2 str,
filters: &'life3 EndpointFilters
) -> Pin<Box<dyn Future<Output = Result<Url, Error>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn get_endpoint<'life0, 'life1, 'life2, 'life3, 'async_trait>( &'life0 self, client: &'life1 Client, service_type: &'life2 str, filters: &'life3 EndpointFilters ) -> Pin<Box<dyn Future<Output = Result<Url, Error>> + Send + 'async_trait>>where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait, 'life3: 'async_trait,
Get a URL for the requested service.