Add doc comments to SSO related interface routines.
Signed-off-by: Jason Volk <jason@zemos.net>
This commit is contained in:
@@ -46,6 +46,8 @@ impl crate::Service for Service {
|
|||||||
fn name(&self) -> &str { crate::service::make_name(std::module_path!()) }
|
fn name(&self) -> &str { crate::service::make_name(std::module_path!()) }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Network request to a Provider returning userinfo for a Session. The session
|
||||||
|
/// must have a valid access token.
|
||||||
#[implement(Service)]
|
#[implement(Service)]
|
||||||
#[tracing::instrument(level = "debug", skip_all, ret)]
|
#[tracing::instrument(level = "debug", skip_all, ret)]
|
||||||
pub async fn request_userinfo(
|
pub async fn request_userinfo(
|
||||||
@@ -66,6 +68,8 @@ pub async fn request_userinfo(
|
|||||||
.log_err()
|
.log_err()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Network request to a Provider returning information for a Session based on
|
||||||
|
/// its access token.
|
||||||
#[implement(Service)]
|
#[implement(Service)]
|
||||||
#[tracing::instrument(level = "debug", skip_all, ret)]
|
#[tracing::instrument(level = "debug", skip_all, ret)]
|
||||||
pub async fn request_tokeninfo(
|
pub async fn request_tokeninfo(
|
||||||
@@ -88,6 +92,7 @@ pub async fn request_tokeninfo(
|
|||||||
.log_err()
|
.log_err()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Network request to a Provider revoking a Session's token.
|
||||||
#[implement(Service)]
|
#[implement(Service)]
|
||||||
#[tracing::instrument(level = "debug", skip_all, ret)]
|
#[tracing::instrument(level = "debug", skip_all, ret)]
|
||||||
pub async fn revoke_token(&self, (provider, session): (&Provider, &Session)) -> Result {
|
pub async fn revoke_token(&self, (provider, session): (&Provider, &Session)) -> Result {
|
||||||
@@ -115,6 +120,8 @@ pub async fn revoke_token(&self, (provider, session): (&Provider, &Session)) ->
|
|||||||
.map(|_| ())
|
.map(|_| ())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Network request to a Provider to obtain an access token for a Session using
|
||||||
|
/// a provided code.
|
||||||
#[implement(Service)]
|
#[implement(Service)]
|
||||||
#[tracing::instrument(level = "debug", skip_all, ret)]
|
#[tracing::instrument(level = "debug", skip_all, ret)]
|
||||||
pub async fn request_token(
|
pub async fn request_token(
|
||||||
@@ -224,21 +231,29 @@ pub async fn get_user(&self, user_id: &UserId) -> Result<(Provider, Session)> {
|
|||||||
Ok((provider, session))
|
Ok((provider, session))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Generate a unique-id string determined by the combination of `Provider` and
|
||||||
|
/// `Session` instances.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn unique_id((provider, session): (&Provider, &Session)) -> Result<String> {
|
pub fn unique_id((provider, session): (&Provider, &Session)) -> Result<String> {
|
||||||
unique_id_parts((provider, session)).and_then(unique_id_iss_sub)
|
unique_id_parts((provider, session)).and_then(unique_id_iss_sub)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Generate a unique-id string determined by the combination of `Provider`
|
||||||
|
/// instance and `sub` string.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn unique_id_sub((provider, sub): (&Provider, &str)) -> Result<String> {
|
pub fn unique_id_sub((provider, sub): (&Provider, &str)) -> Result<String> {
|
||||||
unique_id_sub_parts((provider, sub)).and_then(unique_id_iss_sub)
|
unique_id_sub_parts((provider, sub)).and_then(unique_id_iss_sub)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Generate a unique-id string determined by the combination of `issuer_url`
|
||||||
|
/// and `Session` instance.
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn unique_id_iss((iss, session): (&str, &Session)) -> Result<String> {
|
pub fn unique_id_iss((iss, session): (&str, &Session)) -> Result<String> {
|
||||||
unique_id_iss_parts((iss, session)).and_then(unique_id_iss_sub)
|
unique_id_iss_parts((iss, session)).and_then(unique_id_iss_sub)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Generate a unique-id string determined by the `issuer_url` and the `sub`
|
||||||
|
/// strings directly.
|
||||||
pub fn unique_id_iss_sub((iss, sub): (&str, &str)) -> Result<String> {
|
pub fn unique_id_iss_sub((iss, sub): (&str, &str)) -> Result<String> {
|
||||||
let hash = sha256::delimited([iss, sub].iter());
|
let hash = sha256::delimited([iss, sub].iter());
|
||||||
let b64 = b64encode.encode(hash);
|
let b64 = b64encode.encode(hash);
|
||||||
|
|||||||
@@ -164,6 +164,8 @@ async fn configure(&self, mut provider: Provider) -> Result<Provider> {
|
|||||||
Ok(provider)
|
Ok(provider)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Send a network request to a provider at the computed location of the
|
||||||
|
/// `.well-known/openid-configuration`, returning the configuration.
|
||||||
#[implement(Providers)]
|
#[implement(Providers)]
|
||||||
#[tracing::instrument(level = "debug", ret(level = "trace"), skip(self))]
|
#[tracing::instrument(level = "debug", ret(level = "trace"), skip(self))]
|
||||||
pub async fn discover(&self, provider: &Provider) -> Result<JsonValue> {
|
pub async fn discover(&self, provider: &Provider) -> Result<JsonValue> {
|
||||||
@@ -179,6 +181,8 @@ pub async fn discover(&self, provider: &Provider) -> Result<JsonValue> {
|
|||||||
.map_err(Into::into)
|
.map_err(Into::into)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Compute the location of the `/.well-known/openid-configuration` based on the
|
||||||
|
/// local provider config.
|
||||||
fn discovery_url(provider: &Provider) -> Result<Url> {
|
fn discovery_url(provider: &Provider) -> Result<Url> {
|
||||||
let default_url = provider
|
let default_url = provider
|
||||||
.discovery
|
.discovery
|
||||||
|
|||||||
Reference in New Issue
Block a user