Fix unapproved users being able to log in after registration mode set to closed. (#3096)

- Fixes #3095
This commit is contained in:
Dessalines 2023-06-14 19:02:17 -04:00 committed by GitHub
parent ebd8c86f0e
commit 5af831c6fa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 1 deletions

View file

@ -523,7 +523,8 @@ pub async fn check_registration_application(
local_site: &LocalSite, local_site: &LocalSite,
pool: &DbPool, pool: &DbPool,
) -> Result<(), LemmyError> { ) -> Result<(), LemmyError> {
if local_site.registration_mode == RegistrationMode::RequireApplication if (local_site.registration_mode == RegistrationMode::RequireApplication
|| local_site.registration_mode == RegistrationMode::Closed)
&& !local_user_view.local_user.accepted_application && !local_user_view.local_user.accepted_application
&& !local_user_view.person.admin && !local_user_view.person.admin
{ {

View file

@ -103,12 +103,17 @@ impl PerformCrud for Register {
.await .await
.map_err(|e| LemmyError::from_error_message(e, "user_already_exists"))?; .map_err(|e| LemmyError::from_error_message(e, "user_already_exists"))?;
// Automatically set their application as accepted, if they created this with open registration.
// Also fixes a bug which allows users to log in when registrations are changed to closed.
let accepted_application = Some(!require_registration_application);
// Create the local user // Create the local user
let local_user_form = LocalUserInsertForm::builder() let local_user_form = LocalUserInsertForm::builder()
.person_id(inserted_person.id) .person_id(inserted_person.id)
.email(data.email.as_deref().map(str::to_lowercase)) .email(data.email.as_deref().map(str::to_lowercase))
.password_encrypted(data.password.to_string()) .password_encrypted(data.password.to_string())
.show_nsfw(Some(data.show_nsfw)) .show_nsfw(Some(data.show_nsfw))
.accepted_application(accepted_application)
.build(); .build();
let inserted_local_user = match LocalUser::create(context.pool(), &local_user_form).await { let inserted_local_user = match LocalUser::create(context.pool(), &local_user_form).await {