AUTH_ALLOW_REGISTRATION env variable
This commit is contained in:
@@ -43,6 +43,8 @@ impl From<RegisterUserRequest> for CreateUserRequest {
|
|||||||
pub enum RegisterUserError {
|
pub enum RegisterUserError {
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
CreateUser(#[from] CreateUserError),
|
CreateUser(#[from] CreateUserError),
|
||||||
|
#[error("Registration is disabled")]
|
||||||
|
Disabled,
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
Unknown(#[from] anyhow::Error),
|
Unknown(#[from] anyhow::Error),
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ use crate::{
|
|||||||
};
|
};
|
||||||
|
|
||||||
const AUTH_SESSION_EXPIRATION_KEY: &str = "AUTH_SESSION_EXPIRATION";
|
const AUTH_SESSION_EXPIRATION_KEY: &str = "AUTH_SESSION_EXPIRATION";
|
||||||
|
const ALLOW_REGISTRATION_KEY: &str = "AUTH_ALLOW_REGISTRATION";
|
||||||
|
|
||||||
/// The authentication service configuration
|
/// The authentication service configuration
|
||||||
///
|
///
|
||||||
@@ -59,6 +60,7 @@ const AUTH_SESSION_EXPIRATION_KEY: &str = "AUTH_SESSION_EXPIRATION";
|
|||||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||||
pub struct AuthConfig {
|
pub struct AuthConfig {
|
||||||
session_lifetime: SessionExpirationTime,
|
session_lifetime: SessionExpirationTime,
|
||||||
|
allow_registration: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl AuthConfig {
|
impl AuthConfig {
|
||||||
@@ -71,12 +73,27 @@ impl AuthConfig {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(Self { session_lifetime })
|
let allow_registration = match Config::load_env(ALLOW_REGISTRATION_KEY)
|
||||||
|
.map(|v| v.to_lowercase())
|
||||||
|
.as_deref()
|
||||||
|
{
|
||||||
|
Ok("true") => true,
|
||||||
|
Ok("false") | Ok(_) | Err(_) => false,
|
||||||
|
};
|
||||||
|
|
||||||
|
Ok(Self {
|
||||||
|
session_lifetime,
|
||||||
|
allow_registration,
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn session_lifetime(&self) -> SessionExpirationTime {
|
pub fn session_lifetime(&self) -> SessionExpirationTime {
|
||||||
self.session_lifetime
|
self.session_lifetime
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn allow_registration(&self) -> bool {
|
||||||
|
self.allow_registration
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
@@ -232,6 +249,11 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
async fn register_user(&self, request: RegisterUserRequest) -> Result<User, RegisterUserError> {
|
async fn register_user(&self, request: RegisterUserRequest) -> Result<User, RegisterUserError> {
|
||||||
|
if !self.config.allow_registration {
|
||||||
|
self.metrics.record_user_registration_failure().await;
|
||||||
|
return Err(RegisterUserError::Disabled);
|
||||||
|
}
|
||||||
|
|
||||||
let result = self.repository.create_user(request.into()).await;
|
let result = self.repository.create_user(request.into()).await;
|
||||||
|
|
||||||
if let Ok(user) = result.as_ref() {
|
if let Ok(user) = result.as_ref() {
|
||||||
|
|||||||
@@ -112,6 +112,9 @@ impl From<RegisterUserError> for ApiError {
|
|||||||
fn from(value: RegisterUserError) -> Self {
|
fn from(value: RegisterUserError) -> Self {
|
||||||
match value {
|
match value {
|
||||||
RegisterUserError::CreateUser(err) => err.into(),
|
RegisterUserError::CreateUser(err) => err.into(),
|
||||||
|
RegisterUserError::Disabled => {
|
||||||
|
Self::BadRequest("User registration is disabled".to_string())
|
||||||
|
}
|
||||||
RegisterUserError::Unknown(error) => Self::InternalServerError(error.to_string()),
|
RegisterUserError::Unknown(error) => Self::InternalServerError(error.to_string()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user