You've already forked authentication-service
mirror of
https://github.com/matrix-org/matrix-authentication-service.git
synced 2025-07-28 11:02:02 +03:00
Enable the clippy::str_to_string lint
This commit is contained in:
@ -75,7 +75,7 @@ impl Options {
|
|||||||
// Read the MAS_CONFIG environment variable
|
// Read the MAS_CONFIG environment variable
|
||||||
std::env::var("MAS_CONFIG")
|
std::env::var("MAS_CONFIG")
|
||||||
// Default to "config.yaml"
|
// Default to "config.yaml"
|
||||||
.unwrap_or_else(|_| "config.yaml".to_string())
|
.unwrap_or_else(|_| "config.yaml".to_owned())
|
||||||
// Split the file list on `:`
|
// Split the file list on `:`
|
||||||
.split(':')
|
.split(':')
|
||||||
.map(PathBuf::from)
|
.map(PathBuf::from)
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all)]
|
#![deny(clippy::all, clippy::str_to_string)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
#![allow(clippy::module_name_repetitions)]
|
#![allow(clippy::module_name_repetitions)]
|
||||||
|
|
||||||
|
@ -36,7 +36,7 @@ pub fn port(_gen: &mut SchemaGenerator) -> Schema {
|
|||||||
pub fn hostname(_gen: &mut SchemaGenerator) -> Schema {
|
pub fn hostname(_gen: &mut SchemaGenerator) -> Schema {
|
||||||
Schema::Object(SchemaObject {
|
Schema::Object(SchemaObject {
|
||||||
instance_type: Some(InstanceType::String.into()),
|
instance_type: Some(InstanceType::String.into()),
|
||||||
format: Some("hostname".to_string()),
|
format: Some("hostname".to_owned()),
|
||||||
..SchemaObject::default()
|
..SchemaObject::default()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ use super::ConfigurationSection;
|
|||||||
use crate::schema;
|
use crate::schema;
|
||||||
|
|
||||||
fn default_connection_string() -> String {
|
fn default_connection_string() -> String {
|
||||||
"postgresql://".to_string()
|
"postgresql://".to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_max_connections() -> NonZeroU32 {
|
fn default_max_connections() -> NonZeroU32 {
|
||||||
|
@ -28,7 +28,7 @@ use super::ConfigurationSection;
|
|||||||
fn mailbox_schema(_gen: &mut SchemaGenerator) -> Schema {
|
fn mailbox_schema(_gen: &mut SchemaGenerator) -> Schema {
|
||||||
Schema::Object(SchemaObject {
|
Schema::Object(SchemaObject {
|
||||||
instance_type: Some(InstanceType::String.into()),
|
instance_type: Some(InstanceType::String.into()),
|
||||||
format: Some("email".to_string()),
|
format: Some("email".to_owned()),
|
||||||
..SchemaObject::default()
|
..SchemaObject::default()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -36,7 +36,7 @@ fn mailbox_schema(_gen: &mut SchemaGenerator) -> Schema {
|
|||||||
fn hostname_schema(_gen: &mut SchemaGenerator) -> Schema {
|
fn hostname_schema(_gen: &mut SchemaGenerator) -> Schema {
|
||||||
Schema::Object(SchemaObject {
|
Schema::Object(SchemaObject {
|
||||||
instance_type: Some(InstanceType::String.into()),
|
instance_type: Some(InstanceType::String.into()),
|
||||||
format: Some("hostname".to_string()),
|
format: Some("hostname".to_owned()),
|
||||||
..SchemaObject::default()
|
..SchemaObject::default()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -107,11 +107,11 @@ impl Default for EmailTransportConfig {
|
|||||||
|
|
||||||
fn default_email() -> Mailbox {
|
fn default_email() -> Mailbox {
|
||||||
let address = Address::new("root", "localhost").unwrap();
|
let address = Address::new("root", "localhost").unwrap();
|
||||||
Mailbox::new(Some("Authentication Service".to_string()), address)
|
Mailbox::new(Some("Authentication Service".to_owned()), address)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_sendmail_command() -> String {
|
fn default_sendmail_command() -> String {
|
||||||
"sendmail".to_string()
|
"sendmail".to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Configuration related to sending emails
|
/// Configuration related to sending emails
|
||||||
|
@ -20,7 +20,7 @@ use serde_with::serde_as;
|
|||||||
use super::ConfigurationSection;
|
use super::ConfigurationSection;
|
||||||
|
|
||||||
fn default_homeserver() -> String {
|
fn default_homeserver() -> String {
|
||||||
"localhost:8008".to_string()
|
"localhost:8008".to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Configuration related to the Matrix homeserver
|
/// Configuration related to the Matrix homeserver
|
||||||
@ -74,7 +74,7 @@ mod tests {
|
|||||||
|
|
||||||
let config = MatrixConfig::load_from_file("config.yaml")?;
|
let config = MatrixConfig::load_from_file("config.yaml")?;
|
||||||
|
|
||||||
assert_eq!(config.homeserver, "matrix.org".to_string());
|
assert_eq!(config.homeserver, "matrix.org".to_owned());
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
});
|
});
|
||||||
|
@ -22,15 +22,15 @@ use serde_with::serde_as;
|
|||||||
use super::ConfigurationSection;
|
use super::ConfigurationSection;
|
||||||
|
|
||||||
fn default_client_registration_endpoint() -> String {
|
fn default_client_registration_endpoint() -> String {
|
||||||
"client_registration/violation".to_string()
|
"client_registration/violation".to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_register_endpoint() -> String {
|
fn default_register_endpoint() -> String {
|
||||||
"register/violation".to_string()
|
"register/violation".to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn default_authorization_grant_endpoint() -> String {
|
fn default_authorization_grant_endpoint() -> String {
|
||||||
"authorization_grant/violation".to_string()
|
"authorization_grant/violation".to_owned()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Application secrets
|
/// Application secrets
|
||||||
|
@ -293,7 +293,7 @@ impl ConfigurationSection<'_> for SecretsConfig {
|
|||||||
Gh7BNzCeN+D6
|
Gh7BNzCeN+D6
|
||||||
-----END PRIVATE KEY-----
|
-----END PRIVATE KEY-----
|
||||||
"#}
|
"#}
|
||||||
.to_string(),
|
.to_owned(),
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
let ecdsa_key = KeyConfig {
|
let ecdsa_key = KeyConfig {
|
||||||
@ -306,7 +306,7 @@ impl ConfigurationSection<'_> for SecretsConfig {
|
|||||||
OhBAAUVci1RpmUA+KdCL5sw9nadAEiONeiGr+28RYHZmlB9qXnjC
|
OhBAAUVci1RpmUA+KdCL5sw9nadAEiONeiGr+28RYHZmlB9qXnjC
|
||||||
-----END PRIVATE KEY-----
|
-----END PRIVATE KEY-----
|
||||||
"#}
|
"#}
|
||||||
.to_string(),
|
.to_owned(),
|
||||||
),
|
),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, rustdoc::broken_intra_doc_links)]
|
#![deny(clippy::all, clippy::str_to_string, rustdoc::broken_intra_doc_links)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
#![allow(
|
#![allow(
|
||||||
clippy::module_name_repetitions,
|
clippy::module_name_repetitions,
|
||||||
|
@ -153,7 +153,7 @@ impl TokenType {
|
|||||||
|
|
||||||
let token_type =
|
let token_type =
|
||||||
TokenType::match_prefix(prefix).ok_or_else(|| TokenFormatError::UnknownPrefix {
|
TokenType::match_prefix(prefix).ok_or_else(|| TokenFormatError::UnknownPrefix {
|
||||||
prefix: prefix.to_string(),
|
prefix: prefix.to_owned(),
|
||||||
})?;
|
})?;
|
||||||
|
|
||||||
let base = format!("{}_{}", token_type.prefix(), random_part);
|
let base = format!("{}_{}", token_type.prefix(), random_part);
|
||||||
@ -162,7 +162,7 @@ impl TokenType {
|
|||||||
if crc != expected_crc {
|
if crc != expected_crc {
|
||||||
return Err(TokenFormatError::InvalidCrc {
|
return Err(TokenFormatError::InvalidCrc {
|
||||||
expected: expected_crc,
|
expected: expected_crc,
|
||||||
got: crc.to_string(),
|
got: crc.to_owned(),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,8 +34,8 @@ where
|
|||||||
pub fn samples() -> Vec<Self> {
|
pub fn samples() -> Vec<Self> {
|
||||||
vec![User {
|
vec![User {
|
||||||
data: Default::default(),
|
data: Default::default(),
|
||||||
username: "john".to_string(),
|
username: "john".to_owned(),
|
||||||
sub: "123-456".to_string(),
|
sub: "123-456".to_owned(),
|
||||||
primary_email: None,
|
primary_email: None,
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
@ -147,13 +147,13 @@ where
|
|||||||
vec![
|
vec![
|
||||||
Self {
|
Self {
|
||||||
data: T::UserEmailData::default(),
|
data: T::UserEmailData::default(),
|
||||||
email: "alice@example.com".to_string(),
|
email: "alice@example.com".to_owned(),
|
||||||
created_at: Utc::now(),
|
created_at: Utc::now(),
|
||||||
confirmed_at: Some(Utc::now()),
|
confirmed_at: Some(Utc::now()),
|
||||||
},
|
},
|
||||||
Self {
|
Self {
|
||||||
data: T::UserEmailData::default(),
|
data: T::UserEmailData::default(),
|
||||||
email: "bob@example.com".to_string(),
|
email: "bob@example.com".to_owned(),
|
||||||
created_at: Utc::now(),
|
created_at: Utc::now(),
|
||||||
confirmed_at: None,
|
confirmed_at: None,
|
||||||
},
|
},
|
||||||
@ -209,7 +209,7 @@ where
|
|||||||
.flat_map(|state| {
|
.flat_map(|state| {
|
||||||
UserEmail::samples().into_iter().map(move |email| Self {
|
UserEmail::samples().into_iter().map(move |email| Self {
|
||||||
data: Default::default(),
|
data: Default::default(),
|
||||||
code: "123456".to_string(),
|
code: "123456".to_owned(),
|
||||||
email,
|
email,
|
||||||
created_at: Utc::now() - Duration::minutes(10),
|
created_at: Utc::now() - Duration::minutes(10),
|
||||||
state: state.clone(),
|
state: state.clone(),
|
||||||
|
@ -15,7 +15,12 @@
|
|||||||
//! Helps sending emails to users, with different email backends
|
//! Helps sending emails to users, with different email backends
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, missing_docs, rustdoc::broken_intra_doc_links)]
|
#![deny(
|
||||||
|
clippy::all,
|
||||||
|
clippy::str_to_string,
|
||||||
|
missing_docs,
|
||||||
|
rustdoc::broken_intra_doc_links
|
||||||
|
)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
|
|
||||||
mod mailer;
|
mod mailer;
|
||||||
|
@ -98,7 +98,7 @@ pub async fn get(
|
|||||||
if Utc::now() > login.created_at + Duration::minutes(30) {
|
if Utc::now() > login.created_at + Duration::minutes(30) {
|
||||||
let ctx = ErrorContext::new()
|
let ctx = ErrorContext::new()
|
||||||
.with_code("compat_sso_login_expired")
|
.with_code("compat_sso_login_expired")
|
||||||
.with_description("This login session expired.".to_string());
|
.with_description("This login session expired.".to_owned());
|
||||||
|
|
||||||
let content = templates.render_error(&ctx).await?;
|
let content = templates.render_error(&ctx).await?;
|
||||||
return Ok((cookie_jar, Html(content)).into_response());
|
return Ok((cookie_jar, Html(content)).into_response());
|
||||||
@ -163,7 +163,7 @@ pub async fn post(
|
|||||||
if Utc::now() > login.created_at + Duration::minutes(30) {
|
if Utc::now() > login.created_at + Duration::minutes(30) {
|
||||||
let ctx = ErrorContext::new()
|
let ctx = ErrorContext::new()
|
||||||
.with_code("compat_sso_login_expired")
|
.with_code("compat_sso_login_expired")
|
||||||
.with_description("This login session expired.".to_string());
|
.with_description("This login session expired.".to_owned());
|
||||||
|
|
||||||
let content = templates.render_error(&ctx).await?;
|
let content = templates.render_error(&ctx).await?;
|
||||||
return Ok((cookie_jar, Html(content)).into_response());
|
return Ok((cookie_jar, Html(content)).into_response());
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, rustdoc::broken_intra_doc_links)]
|
#![deny(clippy::all, clippy::str_to_string, rustdoc::broken_intra_doc_links)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
#![allow(
|
#![allow(
|
||||||
clippy::unused_async // Some axum handlers need that
|
clippy::unused_async // Some axum handlers need that
|
||||||
@ -267,7 +267,7 @@ async fn test_router(pool: &PgPool) -> Result<Router, anyhow::Error> {
|
|||||||
let url_builder = UrlBuilder::new("https://example.com/".parse()?);
|
let url_builder = UrlBuilder::new("https://example.com/".parse()?);
|
||||||
|
|
||||||
let matrix_config = MatrixConfig {
|
let matrix_config = MatrixConfig {
|
||||||
homeserver: "example.com".to_string(),
|
homeserver: "example.com".to_owned(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let policy_factory = PolicyFactory::load_default(serde_json::json!({})).await?;
|
let policy_factory = PolicyFactory::load_default(serde_json::json!({})).await?;
|
||||||
|
@ -117,15 +117,15 @@ pub(crate) async fn get(
|
|||||||
let claim_types_supported = Some(vec![ClaimType::Normal]);
|
let claim_types_supported = Some(vec![ClaimType::Normal]);
|
||||||
|
|
||||||
let claims_supported = Some(vec![
|
let claims_supported = Some(vec![
|
||||||
"iss".to_string(),
|
"iss".to_owned(),
|
||||||
"sub".to_string(),
|
"sub".to_owned(),
|
||||||
"aud".to_string(),
|
"aud".to_owned(),
|
||||||
"iat".to_string(),
|
"iat".to_owned(),
|
||||||
"exp".to_string(),
|
"exp".to_owned(),
|
||||||
"nonce".to_string(),
|
"nonce".to_owned(),
|
||||||
"auth_time".to_string(),
|
"auth_time".to_owned(),
|
||||||
"at_hash".to_string(),
|
"at_hash".to_owned(),
|
||||||
"c_hash".to_string(),
|
"c_hash".to_owned(),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
let claims_parameter_supported = Some(false);
|
let claims_parameter_supported = Some(false);
|
||||||
|
@ -93,7 +93,7 @@ impl IntoResponse for RouteError {
|
|||||||
(
|
(
|
||||||
StatusCode::UNAUTHORIZED,
|
StatusCode::UNAUTHORIZED,
|
||||||
Json(PolicyError::new(
|
Json(PolicyError::new(
|
||||||
"invalid_client_metadata".to_string(),
|
"invalid_client_metadata".to_owned(),
|
||||||
joined,
|
joined,
|
||||||
)),
|
)),
|
||||||
)
|
)
|
||||||
|
@ -178,11 +178,11 @@ impl<B> MakeSpanBuilder<Request<B>> for SpanFromAxumRequest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let name = if let Some(path) = request.extensions().get::<MatchedPath>() {
|
let name = if let Some(path) = request.extensions().get::<MatchedPath>() {
|
||||||
let path = path.as_str().to_string();
|
let path = path.as_str().to_owned();
|
||||||
attributes.push(HTTP_ROUTE.string(path.clone()));
|
attributes.push(HTTP_ROUTE.string(path.clone()));
|
||||||
path
|
path
|
||||||
} else {
|
} else {
|
||||||
request.uri().path().to_string()
|
request.uri().path().to_owned()
|
||||||
};
|
};
|
||||||
|
|
||||||
SpanBuilder::from_name(name)
|
SpanBuilder::from_name(name)
|
||||||
@ -196,7 +196,7 @@ pub struct SpanFromDnsRequest;
|
|||||||
|
|
||||||
impl MakeSpanBuilder<Name> for SpanFromDnsRequest {
|
impl MakeSpanBuilder<Name> for SpanFromDnsRequest {
|
||||||
fn make_span_builder(&self, request: &Name) -> SpanBuilder {
|
fn make_span_builder(&self, request: &Name) -> SpanBuilder {
|
||||||
let attributes = vec![NET_HOST_NAME.string(request.as_str().to_string())];
|
let attributes = vec![NET_HOST_NAME.string(request.as_str().to_owned())];
|
||||||
|
|
||||||
SpanBuilder::from_name("resolve")
|
SpanBuilder::from_name("resolve")
|
||||||
.with_kind(SpanKind::Client)
|
.with_kind(SpanKind::Client)
|
||||||
|
@ -28,6 +28,6 @@ where
|
|||||||
{
|
{
|
||||||
fn on_error(&self, span: &SpanRef<'_>, err: &E) {
|
fn on_error(&self, span: &SpanRef<'_>, err: &E) {
|
||||||
let attributes = vec![EXCEPTION_MESSAGE.string(err.to_string())];
|
let attributes = vec![EXCEPTION_MESSAGE.string(err.to_string())];
|
||||||
span.add_event("exception".to_string(), attributes);
|
span.add_event("exception".to_owned(), attributes);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(
|
#![deny(
|
||||||
clippy::all,
|
clippy::all,
|
||||||
|
clippy::str_to_string,
|
||||||
rustdoc::missing_crate_level_docs,
|
rustdoc::missing_crate_level_docs,
|
||||||
rustdoc::broken_intra_doc_links
|
rustdoc::broken_intra_doc_links
|
||||||
)]
|
)]
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, rustdoc::broken_intra_doc_links)]
|
#![deny(clippy::all, clippy::str_to_string, rustdoc::broken_intra_doc_links)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
|
|
||||||
use std::{collections::HashMap, fmt::Display, path::PathBuf, sync::Arc};
|
use std::{collections::HashMap, fmt::Display, path::PathBuf, sync::Arc};
|
||||||
|
@ -89,8 +89,8 @@ pub trait EnumEntry: DeserializeOwned + Send + Sync {
|
|||||||
(
|
(
|
||||||
key,
|
key,
|
||||||
EnumMember {
|
EnumMember {
|
||||||
value: item.name().to_string(),
|
value: item.name().to_owned(),
|
||||||
description: item.description().map(ToString::to_string),
|
description: item.description().map(ToOwned::to_owned),
|
||||||
enum_name: item.enum_name(),
|
enum_name: item.enum_name(),
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
@ -15,7 +15,12 @@
|
|||||||
//! Values from IANA registries, generated by the `mas-iana-codegen` crate
|
//! Values from IANA registries, generated by the `mas-iana-codegen` crate
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, missing_docs, rustdoc::broken_intra_doc_links)]
|
#![deny(
|
||||||
|
clippy::all,
|
||||||
|
clippy::str_to_string,
|
||||||
|
missing_docs,
|
||||||
|
rustdoc::broken_intra_doc_links
|
||||||
|
)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
#![allow(clippy::module_name_repetitions)]
|
#![allow(clippy::module_name_repetitions)]
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ impl<T, V> Claim<T, V> {
|
|||||||
let value = value.into();
|
let value = value.into();
|
||||||
let value: serde_json::Value =
|
let value: serde_json::Value =
|
||||||
serde_json::to_value(&value).map_err(|_| ClaimError::InvalidClaim(self.claim))?;
|
serde_json::to_value(&value).map_err(|_| ClaimError::InvalidClaim(self.claim))?;
|
||||||
claims.insert(self.claim.to_string(), value);
|
claims.insert(self.claim.to_owned(), value);
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
@ -365,8 +365,8 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn one_or_many_serde() {
|
fn one_or_many_serde() {
|
||||||
let one = OneOrMany(vec!["one".to_string()]);
|
let one = OneOrMany(vec!["one".to_owned()]);
|
||||||
let many = OneOrMany(vec!["one".to_string(), "two".to_string()]);
|
let many = OneOrMany(vec!["one".to_owned(), "two".to_owned()]);
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
one,
|
one,
|
||||||
@ -424,13 +424,13 @@ mod tests {
|
|||||||
.unwrap();
|
.unwrap();
|
||||||
let jti = JTI.extract_optional(&mut claims).unwrap();
|
let jti = JTI.extract_optional(&mut claims).unwrap();
|
||||||
|
|
||||||
assert_eq!(iss, "https://foo.com".to_string());
|
assert_eq!(iss, "https://foo.com".to_owned());
|
||||||
assert_eq!(sub, Some("johndoe".to_string()));
|
assert_eq!(sub, Some("johndoe".to_owned()));
|
||||||
assert_eq!(aud.as_deref(), Some(&vec!["abcd-efgh".to_string()]));
|
assert_eq!(aud.as_deref(), Some(&vec!["abcd-efgh".to_owned()]));
|
||||||
assert_eq!(iat.as_deref(), Some(&now));
|
assert_eq!(iat.as_deref(), Some(&now));
|
||||||
assert_eq!(nbf.as_deref(), Some(&now));
|
assert_eq!(nbf.as_deref(), Some(&now));
|
||||||
assert_eq!(exp.as_deref(), Some(&expiration));
|
assert_eq!(exp.as_deref(), Some(&expiration));
|
||||||
assert_eq!(jti, Some("1122-3344-5566-7788".to_string()));
|
assert_eq!(jti, Some("1122-3344-5566-7788".to_owned()));
|
||||||
|
|
||||||
assert!(claims.is_empty());
|
assert!(claims.is_empty());
|
||||||
}
|
}
|
||||||
|
@ -252,7 +252,7 @@ mod tests {
|
|||||||
let jwt: DecodedJsonWebToken<serde_json::Value> =
|
let jwt: DecodedJsonWebToken<serde_json::Value> =
|
||||||
jwt.decode_and_verify(&store).await.unwrap();
|
jwt.decode_and_verify(&store).await.unwrap();
|
||||||
|
|
||||||
assert_eq!(jwt.header.typ, Some("JWT".to_string()));
|
assert_eq!(jwt.header.typ, Some("JWT".to_owned()));
|
||||||
assert_eq!(jwt.header.alg, JsonWebSignatureAlg::Hs256);
|
assert_eq!(jwt.header.alg, JsonWebSignatureAlg::Hs256);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
jwt.payload,
|
jwt.payload,
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, rustdoc::broken_intra_doc_links)]
|
#![deny(clippy::all, clippy::str_to_string, rustdoc::broken_intra_doc_links)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
#![allow(clippy::missing_errors_doc, clippy::module_name_repetitions)]
|
#![allow(clippy::missing_errors_doc, clippy::module_name_repetitions)]
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, rustdoc::broken_intra_doc_links)]
|
#![deny(clippy::all, clippy::str_to_string, rustdoc::broken_intra_doc_links)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
|
|
||||||
use mas_iana::oauth::OAuthAuthorizationEndpointResponseType;
|
use mas_iana::oauth::OAuthAuthorizationEndpointResponseType;
|
||||||
|
@ -64,7 +64,7 @@ mod tests {
|
|||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn serialize_webfinger_response_test() {
|
fn serialize_webfinger_response_test() {
|
||||||
let res = WebFingerResponse::new("acct:john@example.com".to_string())
|
let res = WebFingerResponse::new("acct:john@example.com".to_owned())
|
||||||
.with_issuer(Url::parse("https://account.example.com/").unwrap());
|
.with_issuer(Url::parse("https://account.example.com/").unwrap());
|
||||||
|
|
||||||
let res = serde_json::to_value(&res).unwrap();
|
let res = serde_json::to_value(&res).unwrap();
|
||||||
|
@ -12,6 +12,11 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
|
#![forbid(unsafe_code)]
|
||||||
|
#![deny(clippy::all, clippy::str_to_string, rustdoc::broken_intra_doc_links)]
|
||||||
|
#![warn(clippy::pedantic)]
|
||||||
|
#![allow(clippy::missing_errors_doc)]
|
||||||
|
|
||||||
use std::io::Cursor;
|
use std::io::Cursor;
|
||||||
|
|
||||||
use anyhow::bail;
|
use anyhow::bail;
|
||||||
@ -25,6 +30,7 @@ use wasmtime::{Config, Engine, Module, Store};
|
|||||||
|
|
||||||
const DEFAULT_POLICY: &[u8] = include_bytes!("../policies/policy.wasm");
|
const DEFAULT_POLICY: &[u8] = include_bytes!("../policies/policy.wasm");
|
||||||
|
|
||||||
|
#[must_use]
|
||||||
pub fn default_wasm_policy() -> impl AsyncRead + std::marker::Unpin {
|
pub fn default_wasm_policy() -> impl AsyncRead + std::marker::Unpin {
|
||||||
Cursor::new(DEFAULT_POLICY)
|
Cursor::new(DEFAULT_POLICY)
|
||||||
}
|
}
|
||||||
@ -109,9 +115,9 @@ impl PolicyFactory {
|
|||||||
Self::load(
|
Self::load(
|
||||||
default_wasm_policy(),
|
default_wasm_policy(),
|
||||||
data,
|
data,
|
||||||
"register/violation".to_string(),
|
"register/violation".to_owned(),
|
||||||
"client_registration/violation".to_string(),
|
"client_registration/violation".to_owned(),
|
||||||
"authorization_grant/violation".to_string(),
|
"authorization_grant/violation".to_owned(),
|
||||||
)
|
)
|
||||||
.await
|
.await
|
||||||
}
|
}
|
||||||
@ -158,6 +164,7 @@ pub struct EvaluationResult {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl EvaluationResult {
|
impl EvaluationResult {
|
||||||
|
#[must_use]
|
||||||
pub fn valid(&self) -> bool {
|
pub fn valid(&self) -> bool {
|
||||||
self.violations.is_empty()
|
self.violations.is_empty()
|
||||||
}
|
}
|
||||||
|
@ -12,7 +12,13 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#![deny(clippy::pedantic)]
|
#![forbid(unsafe_code)]
|
||||||
|
#![deny(
|
||||||
|
clippy::all,
|
||||||
|
clippy::pedantic,
|
||||||
|
clippy::str_to_string,
|
||||||
|
rustdoc::broken_intra_doc_links
|
||||||
|
)]
|
||||||
|
|
||||||
pub(crate) mod endpoints;
|
pub(crate) mod endpoints;
|
||||||
pub(crate) mod traits;
|
pub(crate) mod traits;
|
||||||
|
@ -15,7 +15,12 @@
|
|||||||
//! Serve static files used by the web frontend
|
//! Serve static files used by the web frontend
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, missing_docs, rustdoc::broken_intra_doc_links)]
|
#![deny(
|
||||||
|
clippy::all,
|
||||||
|
clippy::str_to_string,
|
||||||
|
missing_docs,
|
||||||
|
rustdoc::broken_intra_doc_links
|
||||||
|
)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
|
|
||||||
#[cfg(not(feature = "dev"))]
|
#[cfg(not(feature = "dev"))]
|
||||||
|
@ -317,7 +317,7 @@ pub async fn compat_login(
|
|||||||
|
|
||||||
// TODO: pass verifiers list as parameter
|
// TODO: pass verifiers list as parameter
|
||||||
// Verify the password in a blocking thread to avoid blocking the async executor
|
// Verify the password in a blocking thread to avoid blocking the async executor
|
||||||
let password = password.to_string();
|
let password = password.to_owned();
|
||||||
task::spawn_blocking(move || {
|
task::spawn_blocking(move || {
|
||||||
let context = Argon2::default();
|
let context = Argon2::default();
|
||||||
let hasher = PasswordHash::new(&hashed_password)?;
|
let hasher = PasswordHash::new(&hashed_password)?;
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
//! Interactions with the database
|
//! Interactions with the database
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, rustdoc::broken_intra_doc_links)]
|
#![deny(clippy::all, clippy::str_to_string, rustdoc::broken_intra_doc_links)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
#![allow(
|
#![allow(
|
||||||
clippy::missing_errors_doc,
|
clippy::missing_errors_doc,
|
||||||
|
@ -51,7 +51,7 @@ pub async fn add_access_token(
|
|||||||
Ok(AccessToken {
|
Ok(AccessToken {
|
||||||
data: res.id,
|
data: res.id,
|
||||||
expires_after,
|
expires_after,
|
||||||
token: token.to_string(),
|
token: token.to_owned(),
|
||||||
jti: format!("{}", res.id),
|
jti: format!("{}", res.id),
|
||||||
created_at: res.created_at,
|
created_at: res.created_at,
|
||||||
})
|
})
|
||||||
|
@ -49,7 +49,7 @@ pub async fn add_refresh_token(
|
|||||||
|
|
||||||
Ok(RefreshToken {
|
Ok(RefreshToken {
|
||||||
data: res.id,
|
data: res.id,
|
||||||
token: token.to_string(),
|
token: token.to_owned(),
|
||||||
access_token: Some(access_token),
|
access_token: Some(access_token),
|
||||||
created_at: res.created_at,
|
created_at: res.created_at,
|
||||||
})
|
})
|
||||||
|
@ -73,7 +73,7 @@ pub async fn login(
|
|||||||
.map_err(|source| {
|
.map_err(|source| {
|
||||||
if source.not_found() {
|
if source.not_found() {
|
||||||
LoginError::NotFound {
|
LoginError::NotFound {
|
||||||
username: username.to_string(),
|
username: username.to_owned(),
|
||||||
source,
|
source,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -87,7 +87,7 @@ pub async fn login(
|
|||||||
.map_err(|source| {
|
.map_err(|source| {
|
||||||
if matches!(source, AuthenticationError::Password { .. }) {
|
if matches!(source, AuthenticationError::Password { .. }) {
|
||||||
LoginError::Authentication {
|
LoginError::Authentication {
|
||||||
username: username.to_string(),
|
username: username.to_owned(),
|
||||||
source,
|
source,
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -297,7 +297,7 @@ pub async fn authenticate_session(
|
|||||||
|
|
||||||
// TODO: pass verifiers list as parameter
|
// TODO: pass verifiers list as parameter
|
||||||
// Verify the password in a blocking thread to avoid blocking the async executor
|
// Verify the password in a blocking thread to avoid blocking the async executor
|
||||||
let password = password.to_string();
|
let password = password.to_owned();
|
||||||
task::spawn_blocking(move || {
|
task::spawn_blocking(move || {
|
||||||
let context = Argon2::default();
|
let context = Argon2::default();
|
||||||
let hasher = PasswordHash::new(&hashed_password).map_err(AuthenticationError::Password)?;
|
let hasher = PasswordHash::new(&hashed_password).map_err(AuthenticationError::Password)?;
|
||||||
@ -353,7 +353,7 @@ pub async fn register_user(
|
|||||||
|
|
||||||
let user = User {
|
let user = User {
|
||||||
data: id,
|
data: id,
|
||||||
username: username.to_string(),
|
username: username.to_owned(),
|
||||||
sub: format!("fake-sub-{}", id),
|
sub: format!("fake-sub-{}", id),
|
||||||
primary_email: None,
|
primary_email: None,
|
||||||
};
|
};
|
||||||
|
@ -19,7 +19,12 @@
|
|||||||
//! considered "good enough" for now.
|
//! considered "good enough" for now.
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, missing_docs, rustdoc::broken_intra_doc_links)]
|
#![deny(
|
||||||
|
clippy::all,
|
||||||
|
clippy::str_to_string,
|
||||||
|
missing_docs,
|
||||||
|
rustdoc::broken_intra_doc_links
|
||||||
|
)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
|
|
||||||
use std::{collections::VecDeque, sync::Arc, time::Duration};
|
use std::{collections::VecDeque, sync::Arc, time::Duration};
|
||||||
|
@ -281,7 +281,7 @@ impl TemplateContext for LoginContext {
|
|||||||
vec![LoginContext {
|
vec![LoginContext {
|
||||||
form: FormState::default(),
|
form: FormState::default(),
|
||||||
next: None,
|
next: None,
|
||||||
register_link: "/register".to_string(),
|
register_link: "/register".to_owned(),
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -355,7 +355,7 @@ impl TemplateContext for RegisterContext {
|
|||||||
vec![RegisterContext {
|
vec![RegisterContext {
|
||||||
form: FormState::default(),
|
form: FormState::default(),
|
||||||
next: None,
|
next: None,
|
||||||
login_link: "/login".to_string(),
|
login_link: "/login".to_owned(),
|
||||||
}]
|
}]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -621,14 +621,14 @@ impl TemplateContext for EmailVerificationContext {
|
|||||||
.map(|user| {
|
.map(|user| {
|
||||||
let email = UserEmail {
|
let email = UserEmail {
|
||||||
data: (),
|
data: (),
|
||||||
email: "foobar@example.com".to_string(),
|
email: "foobar@example.com".to_owned(),
|
||||||
created_at: Utc::now(),
|
created_at: Utc::now(),
|
||||||
confirmed_at: None,
|
confirmed_at: None,
|
||||||
};
|
};
|
||||||
|
|
||||||
let verification = UserEmailVerification {
|
let verification = UserEmailVerification {
|
||||||
data: (),
|
data: (),
|
||||||
code: "123456".to_string(),
|
code: "123456".to_owned(),
|
||||||
email,
|
email,
|
||||||
created_at: Utc::now(),
|
created_at: Utc::now(),
|
||||||
state: mas_data_model::UserEmailVerificationState::Valid,
|
state: mas_data_model::UserEmailVerificationState::Valid,
|
||||||
@ -690,7 +690,7 @@ impl TemplateContext for EmailVerificationPageContext {
|
|||||||
{
|
{
|
||||||
let email = UserEmail {
|
let email = UserEmail {
|
||||||
data: (),
|
data: (),
|
||||||
email: "foobar@example.com".to_string(),
|
email: "foobar@example.com".to_owned(),
|
||||||
created_at: Utc::now(),
|
created_at: Utc::now(),
|
||||||
confirmed_at: None,
|
confirmed_at: None,
|
||||||
};
|
};
|
||||||
|
@ -203,8 +203,8 @@ mod tests {
|
|||||||
#[test]
|
#[test]
|
||||||
fn form_state_serialization() {
|
fn form_state_serialization() {
|
||||||
let form = TestForm {
|
let form = TestForm {
|
||||||
foo: "john".to_string(),
|
foo: "john".to_owned(),
|
||||||
bar: "hunter2".to_string(),
|
bar: "hunter2".to_owned(),
|
||||||
};
|
};
|
||||||
|
|
||||||
let state = form.to_form_state();
|
let state = form.to_form_state();
|
||||||
@ -227,8 +227,8 @@ mod tests {
|
|||||||
);
|
);
|
||||||
|
|
||||||
let form = TestForm {
|
let form = TestForm {
|
||||||
foo: "".to_string(),
|
foo: "".to_owned(),
|
||||||
bar: "".to_string(),
|
bar: "".to_owned(),
|
||||||
};
|
};
|
||||||
let state = form
|
let state = form
|
||||||
.to_form_state()
|
.to_form_state()
|
||||||
|
@ -13,7 +13,12 @@
|
|||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
|
|
||||||
#![forbid(unsafe_code)]
|
#![forbid(unsafe_code)]
|
||||||
#![deny(clippy::all, missing_docs, rustdoc::broken_intra_doc_links)]
|
#![deny(
|
||||||
|
clippy::all,
|
||||||
|
clippy::str_to_string,
|
||||||
|
missing_docs,
|
||||||
|
rustdoc::broken_intra_doc_links
|
||||||
|
)]
|
||||||
#![warn(clippy::pedantic)]
|
#![warn(clippy::pedantic)]
|
||||||
#![allow(clippy::module_name_repetitions, clippy::missing_errors_doc)]
|
#![allow(clippy::module_name_repetitions, clippy::missing_errors_doc)]
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user