* Show deny reason to users after a failed login. Fixes #2191
* Updating translations.
* Adding registration_denied translated string.
RegistrationApplication::find_by_local_user_id(conn, local_user_id)
})
.await??;
RegistrationApplication::find_by_local_user_id(conn, local_user_id)
})
.await??;
- if registration.deny_reason.is_some() {
- return Err(LemmyError::from_message("registration_denied"));
+ if let Some(deny_reason) = registration.deny_reason {
+ let lang = get_user_lang(local_user_view);
+ let registration_denied_message = format!("{}: {}", lang.registration_denied(), &deny_reason);
+ return Err(LemmyError::from_message(®istration_denied_message));
} else {
return Err(LemmyError::from_message("registration_application_pending"));
}
} else {
return Err(LemmyError::from_message("registration_application_pending"));
}
#[derive(serde::Serialize)]
struct ApiError {
#[derive(serde::Serialize)]
struct ApiError {
}
pub struct LemmyError {
}
pub struct LemmyError {
- pub message: Option<&'static str>,
+ pub message: Option<String>,
pub inner: anyhow::Error,
pub context: SpanTrace,
}
impl LemmyError {
/// Create LemmyError from a message, including stack trace
pub inner: anyhow::Error,
pub context: SpanTrace,
}
impl LemmyError {
/// Create LemmyError from a message, including stack trace
- pub fn from_message(message: &'static str) -> Self {
+ pub fn from_message(message: &str) -> Self {
let inner = anyhow::anyhow!("{}", message);
LemmyError {
let inner = anyhow::anyhow!("{}", message);
LemmyError {
- message: Some(message),
+ message: Some(message.into()),
inner,
context: SpanTrace::capture(),
}
}
/// Create a LemmyError from error and message, including stack trace
inner,
context: SpanTrace::capture(),
}
}
/// Create a LemmyError from error and message, including stack trace
- pub fn from_error_message<E>(error: E, message: &'static str) -> Self
+ pub fn from_error_message<E>(error: E, message: &str) -> Self
where
E: Into<anyhow::Error>,
{
LemmyError {
where
E: Into<anyhow::Error>,
{
LemmyError {
- message: Some(message),
+ message: Some(message.into()),
inner: error.into(),
context: SpanTrace::capture(),
}
}
/// Add message to existing LemmyError (or overwrite existing error)
inner: error.into(),
context: SpanTrace::capture(),
}
}
/// Add message to existing LemmyError (or overwrite existing error)
- pub fn with_message(self, message: &'static str) -> Self {
+ pub fn with_message(self, message: &str) -> Self {
- message: Some(message),
+ message: Some(message.into()),
..self
}
}
pub fn to_json(&self) -> Result<String, Self> {
..self
}
}
pub fn to_json(&self) -> Result<String, Self> {
- let api_error = match self.message {
- Some(error) => ApiError { error },
- None => ApiError { error: "Unknown" },
+ let api_error = match &self.message {
+ Some(error) => ApiError {
+ error: error.into(),
+ },
+ None => ApiError {
+ error: "Unknown".into(),
+ },
};
Ok(serde_json::to_string(&api_error)?)
};
Ok(serde_json::to_string(&api_error)?)
impl Display for LemmyError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
impl Display for LemmyError {
fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
- if let Some(message) = self.message {
+ if let Some(message) = &self.message {
write!(f, "{}: ", message)?;
}
writeln!(f, "{}", self.inner)?;
write!(f, "{}: ", message)?;
}
writeln!(f, "{}", self.inner)?;
fn error_response(&self) -> HttpResponse {
if let Some(message) = &self.message {
fn error_response(&self) -> HttpResponse {
if let Some(message) = &self.message {
- HttpResponse::build(self.status_code()).json(ApiError { error: message })
+ HttpResponse::build(self.status_code()).json(ApiError {
+ error: message.into(),
+ })
} else {
HttpResponse::build(self.status_code())
.content_type("text/plain")
} else {
HttpResponse::build(self.status_code())
.content_type("text/plain")
-Subproject commit ad40feba4263a850f135946847d3ddd1a890a6e7
+Subproject commit 3f86b5c40796fa83054e2226e36effff3b93198a